top*_*dev 2 c++ boost variant void-pointers
我需要一个包含任何用户定义类的实例的变体类型.所以我使用void*:
typedef boost::variant<void*, int, float, std::string> Tvariant;
Run Code Online (Sandbox Code Playgroud)
我用地图创建了一个包装类:
typedef std::map<std::string, Tvariant> Tvalues;
Run Code Online (Sandbox Code Playgroud)
用法示例:
int x = 123;
attributes.set("int_var", x);
x = attributes.get<int>("int_var");
MyClass* obj = new MyClass();
attributes.set("void*_var", obj);
obj = static_cast<MyClass*>( attributes.get<void*>("void*_var") );
obj = attributes.cast<MyClass*>("void*_var"); // the same
Run Code Online (Sandbox Code Playgroud)
变体类中的void*有2个问题:
可能的解决方案:
std::map<void*, typeid> typeid_map.当用户请求void*value,将其转换为任何TClass*时,让我们评估一个断言:assert(typeid_from_typeid_map == typeid(TClass*)).问题:
1.是否有其他解决方案来保存任何用户定义的类的值?
2.您可能会为上述问题推荐更好的解决方案并指出其他一些问题吗?
你看看Boost :: Any吗?这是通过编译时对类型转换的知识,同时通过Any隐藏它的真实类型.