Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;作为返回类型的typeid 有没有一种方法使用 Type ID >代码>或类似于C++中的返回类型?_C++_Return_Typeid - Fatal编程技术网

C++;作为返回类型的typeid 有没有一种方法使用 Type ID >代码>或类似于C++中的返回类型?

C++;作为返回类型的typeid 有没有一种方法使用 Type ID >代码>或类似于C++中的返回类型?,c++,return,typeid,C++,Return,Typeid,例如: 我在类中有一个私有变量,可以设置为任何类型。我怎样才能返回它,因为下面的代码没有编译 #include <type_traits> typeid(MyVariable) GetValue(){ return MyVariable; } #包括 typeid(MyVariable)GetValue(){ 返回MyVariable; } 我猜这里的困惑在于你所说的“可以设置为任何类型”是什么意思 我从以下四种方式中选择一种: 您已经实现了一个类似boost::Any的

例如:

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

#include <type_traits>

typeid(MyVariable) GetValue(){
    return MyVariable;
}
#包括
typeid(MyVariable)GetValue(){
返回MyVariable;
}

我猜这里的困惑在于你所说的“可以设置为任何类型”是什么意思

我从以下四种方式中选择一种:

  • 您已经实现了一个类似boost::Any的类,并希望在调用时将其隐藏在返回其内容的类中
  • 您有一个模板定义,其中一个模板参数提供MyVariable的类型信息
  • 您正在尝试为使用boost::Any模拟函数定义的变量返回type_info对象
  • 您正在尝试为模板中定义的变量返回type_info对象
  • 如果1或3:

    template<typename T> T GetValue() { return any_cast<T>(MyVariable); }
    const std::type_info &GetValueType() { return MyVariable.type(); }
    
    template T GetValue(){返回任意_转换(MyVariable);}
    const std::type_info&GetValueType(){return MyVariable.type();}
    
    您没有提供boost::Any模拟如何工作的详细信息,所以我只是假设它是boost::Any实例(我个人从未使用过,所以希望我的语法是正确的)。如果试图从MyVariable中提取错误的类型,则会引发此错误。如果您喜欢处理指针和空值,请按如下方式操作:

    template<typename T> T* GetValue() { return any_cast<T*>(&MyVariable); }
    
    template T*GetValue(){返回任意_cast(&MyVariable);}
    
    如果T不是存储在变量中的项的类型,则返回空指针

    如果2或4:

    在这种情况下,在某个地方有一个模板参数,它定义了MyVariable的类型。这就是你想要的:

    template<typename T> class Holder {
        T MyVariable;
        T &GetValue() { return MyVariable; }
        const std::type_info & GetValueType() { return typeid(T); }
    };
    
    模板类持有者{
    myt变量;
    T&GetValue(){return MyVariable;}
    const std::type_info&GetValueType(){return typeid(T);}
    };
    

    好的,这里希望这些答案中有一个与您试图问的问题相匹配:)

    您是在问如何从函数返回
    typeid(…)
    表达式的结果吗?
    std::type_info GetType(){return typeid(MyVariable);}
    返回类型,然后可能是
    void GetValue(void*ptr){*(SomeType*)ptr=MyVariable;}
    ?但这似乎真的很可怕。这闻起来像个XY问题,你想用这个解决什么问题?也许您只是在寻找简单的多态性?
    typeid
    用于调查类型的损坏名称,而不是类型推断,在C++11中,有
    decltype
    auto
    就是为了这样做的。另外,如果您的类能够接受“any”类型,为什么不使用模板化类型
    T
    作为返回类型?@H2CO3-感谢您的回答:我不是在寻找任何形式的多态性-我只是想看看是否有比我创建的
    any
    类更简单的解决方案
    void*
    会变得非常难看,所以我尽量避开它们:)可以在编译时或运行时设置为任何类型吗?