Tho*_*mas 24
不,这在C++中是不可能的.
RTTI typeid
运算符允许您在运行时获取有关类型的一些信息:您可以获取类型的名称并检查它是否等于另一种类型,但这是关于它的.
Mic*_*yan 16
不是写的,但你可以做类似的事情......
class Type
{
public:
virtual ~Type(){}
virtual void* allocate()const=0;
virtual void* cast(void* obj)const=0;
};
template<typename T> class TypeImpl : public Type
{
public:
virtual void* allocate()const{ return new T; }
virtual void* cast(void* obj)const{ return static_cast<T*>(obj); }
};
// ...
Type* type = new TypeImpl<int>;
void* myint = type->allocate();
// ...
Run Code Online (Sandbox Code Playgroud)
根据您需要的功能,可以扩展此类功能.
您无法在C++中执行此操作,但您可以使用boost任何库,然后测试它所拥有的类型.例:
bool is_int(const boost::any & operand)
{
return operand.type() == typeid(int);
}
Run Code Online (Sandbox Code Playgroud)
http://www.boost.org/doc/libs/1_42_0/doc/html/any/s02.html
不,你不能直接存储类型,但你可以存储类型的名称.
const char* str = typeid(int).name();
Run Code Online (Sandbox Code Playgroud)
我想无论何时你打算使用那个变量进行比较,你都可以在那时将str
变量与name()
类型进行比较.
const char* myType = typeid(int).name();
//....
//Some time later:
if(!strcmp(myType, typeid(int).name()))
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)