#include \n#include \n\nclass Any {\npublic:\n Any() : data(nullptr) {}\n \n template\n Any(const T& value) : data(new Holder(value)) {}\n \n Any(const Any& other) : data(other.data ? other.data->clone() : nullptr) {}\n \n ~Any() { delete data; }\n \n Any& operator=(const Any& other) {\n if (this != &other) {\n delete data;\n data = other.data ? other.data->clone() : nullptr;\n }\n return this;\n }\n \n template\n Any& operator=(const T& value) {\n delete data;\n data = new Holder(value);\n return this;\n }\n \n template\n T cast() const {\n if (typeid(T) != data->type()) {\n throw std::bad_cast();\n }\n return static_cast<Holder>(data)->value;\n }\n\nprivate:\n class BaseHolder {\n public:\n virtual ~BaseHolder() {}\n virtual BaseHolder clone() const = 0;\n virtual const std::type_info& type() const = 0;\n };\n \n template\n class Holder : public BaseHolder {\n public:\n Holder(const T& value) : value(value) {}\n BaseHolder* clone() const override { return new Holder(value); }\n const std::type_info& type() const override { return typeid(T); }\n \n T value;\n };\n \n BaseHolder* data;\n};\n\nint main() {\n Any a = 5;\n std::cout << a.cast() << std::endl;\n \n a = 3.14;\n std::cout << a.cast() << std::endl;\n \n try {\n a.cast(); // 抛出std::bad_cast异常\n } catch (const std::bad_cast& e) {\n std::cout << "Failed to cast" << std::endl;\n }\n \n return 0;\n}\n\n// 类 Any 使用一个抽象基类 BaseHolder 作为数据持有者,并通过模板类 Holder 派生出具体类型的持有者。\n// 类 Any 的数据成员 data 指向 BaseHolder 的实例,该实例根据存储的具体类型动态分配派生类 Holder 的实例。\n\n// Any 类提供了构造函数和赋值运算符的重载,以支持不同类型的值的存储和赋值。\n// cast() 函数用于将存储的值转换为指定类型,并进行类型检查,如果类型不匹配则抛出 std::bad_cast 异常。\n\n// 在示例代码的 main() 函数中,首先将整数值 5 存储在对象 a 中,并通过 cast() 函数将其转换为 int 类型并打印输出。\n// 然后将浮点数值 3.14 赋值给 a,并再次进行类型转换并输出。\n// 最后尝试将 a 转换为 int 类型,由于类型不匹配,将抛出 std::bad_cast 异常,并在 catch 块中捕获并打印出错误信息。\n\n// 请注意,上述示例代码仅作为演示目的,并未完全考虑异常安全性和性能等方面的问题,实际使用时还需根据具体需求进行适当的改进。