我有一些类和一个指针,哪个类是void *,指向其中一个类。
我在字符串变量中也有该类的名称,我想将该void指针强制转换为该类。
我想做那样的事情:
string className;
className = "int";
(className *) voidPointer;
有没有办法做到这一点??
提前谢谢你!
答案 0 :(得分:2)
这不可能像你想要的那样。
但是,我认为boost::any
可以为您提供帮助:
boost::any obj;
if (className == "int")
obj = (int)voidPointer;
else if (className == "short")
obj = (short)voidPointer;
//from now you can call obj.type() to know the type of value obj holds
//for example
if(obj.type() == typeid(int))
{
int value = boost::any_cast<int>(obj);
std::cout <<"Stored value is int = " << value << std::endl;
}
也就是说,使用boost::any_cast
获取存储在boost::any
类型对象中的值。
答案 1 :(得分:1)
C ++没有反射,所以你不能轻易做到这一点。
你可以做的就是这些内容
string classname;
void * ptr;
if ( classname == "Foo" )
{
Foo* f = static_cast<Foo*> ( ptr );
}
else if ( classname == "Bar" )
{
Bar* f = static_cast<Bar*> ( ptr );
}
答案 2 :(得分:0)
不,你不能这样做。但是,您可以设想使用模板类来执行此操作。注意我提供了一个解决方案,但我认为你不应该存储一个void*
指针。
template<class T>
T* cast(void* ptr) { return static_cast<T*>(ptr); };
然后,你可以这样做:
int* intPtr = cast<int>(ptr);
我再说一遍,你可能根本不需要使用void*
。
答案 3 :(得分:0)
当然可以这样做:
if (className == "int") {
int *intPtr = static_cast<int*>(voidPointer);
}
但这并不是很优雅 - 但如果必须的话,你当然可以这样做(但最有可能找到解决问题的方法)。