C++ typeid 作为返回类型

Joe*_*Joe 6 c++ return typeid

有没有办法使用typeid或类似于 C++ 中的返回类型?

例如:

我在类中有一个私有变量,可以设置为任何类型。我怎么能返回它,因为下面的不编译。

#include <type_traits>

typeid(MyVariable) GetValue(){
    return MyVariable;
}
Run Code Online (Sandbox Code Playgroud)

Spe*_*ump 3

我猜这里的困惑在于“可以设置为任何类型”的含义。

我通过以下四种方式之一阅读:

  1. 您已经实现了像 boost::Any 这样的类,并且希望将其隐藏在类中,以便在调用时返回其内容。
  2. 您有一个模板定义,其中模板参数之一提供 MyVariable 的类型信息
  3. 您正在尝试返回使用 boost::Any 模拟定义的变量的 type_info 对象
  4. 您正在尝试返回模板中定义的变量的 type_info 对象

如果是 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)

好吧,希望这些答案之一与您想问的问题相符:)