有没有办法在C ++中使用typeid
或类似的返回类型?
例如:
我在类中有一个私有变量,可以设置为任何类型。我怎么能够返回它,因为下面没有编译。
#include <type_traits>
typeid(MyVariable) GetValue(){
return MyVariable;
}
答案 0 :(得分:3)
我猜这里的混淆是关于“你可以设置为任何类型”的意思。
我读了四种方法之一:
如果是1或3:
template<typename T> T GetValue() { return any_cast<T>(MyVariable); }
const std::type_info &GetValueType() { return MyVariable.type(); }
你没有提供你的boost ::任何模拟的工作原理,所以我只是假设它是一个提升::任何实例(我个人从未使用过,所以我希望我的语法是正确的)。如果你试图从MyVariable中提取错误的类型,这将抛出。如果您更喜欢处理指针和NULL值,请执行以下操作:
template<typename T> T* GetValue() { return any_cast<T*>(&MyVariable); }
如果T不是存储在变量中的项的类型,则返回NULL指针。
如果是2或4:
那么,在这种情况下,你有一个模板参数,它定义了MyVariable的类型。这样的事情就是你想要的:
template<typename T> class Holder {
T MyVariable;
T &GetValue() { return MyVariable; }
const std::type_info & GetValueType() { return typeid(T); }
};
嗯,这里希望其中一个答案与您试图提出的问题相符:)