C ++ typeid作为返回类型

时间:2014-01-04 21:36:56

标签: c++ return typeid

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

例如:

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

#include <type_traits>

typeid(MyVariable) GetValue(){
    return MyVariable;
}

1 个答案:

答案 0 :(得分:3)

我猜这里的混淆是关于“你可以设置为任何类型”的意思。

我读了四种方法之一:

  1. 你已经实现了类似boost :: Any的类,并希望在你的类中隐藏它,在调用时返回它的内容。
  2. 您有一个模板定义,其中一个模板参数提供了MyVariable
  3. 的类型信息
  4. 您正在尝试为使用boost :: Any analog
  5. 定义的变量返回type_info对象
  6. 您正在尝试返回模板中定义的变量的type_info对象
  7. 如果是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); }
    };
    

    嗯,这里希望其中一个答案与您试图提出的问题相符:)