有没有办法使用typeid或类似于 C++ 中的返回类型?
例如:
我在类中有一个私有变量,可以设置为任何类型。我怎么能返回它,因为下面的不编译。
#include <type_traits>
typeid(MyVariable) GetValue(){
return MyVariable;
}
Run Code Online (Sandbox Code Playgroud)
我猜这里的困惑在于“可以设置为任何类型”的含义。
我通过以下四种方式之一阅读:
如果是 1 或 3:
template<typename T> T GetValue() { return any_cast<T>(MyVariable); }
const std::type_info &GetValueType() { return MyVariable.type(); }
Run Code Online (Sandbox Code Playgroud)
您没有提供 boost::Any 模拟如何工作的详细信息,所以我只是假设它是 boost::Any 实例(我个人从未使用过,所以希望我的语法是正确的)。如果您尝试从 MyVariable 中提取错误的类型,则会抛出此错误。如果您喜欢处理指针和 NULL 值,请像这样:
template<typename T> T* GetValue() { return any_cast<T*>(&MyVariable); }
Run Code Online (Sandbox Code Playgroud)
如果 T 不是变量中存储的项的类型,这将返回 NULL 指针。
如果是 2 或 4:
好吧,在这种情况下,您在某处有一个模板参数,它定义了 MyVariable 的类型。像这样的东西就是你想要的:
template<typename T> class Holder {
T MyVariable;
T &GetValue() { return MyVariable; }
const std::type_info & GetValueType() { return typeid(T); }
};
Run Code Online (Sandbox Code Playgroud)
好吧,希望这些答案之一与您想问的问题相符:)