gpt4 book ai didi

C++ typeid 作为返回类型

转载 作者:太空狗 更新时间:2023-10-29 21:22:14 26 4
gpt4 key购买 nike

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

例如:

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

#include <type_traits>

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

最佳答案

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

我阅读了四种方式之一:

  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(); }

你没有提供你的 boost::Any 模拟如何工作的细节,所以我只是假设它是一个 boost::Any 实例(我个人从未使用过,所以希望我的语法是正确的)。如果您尝试从 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); }
};

好吧,希望其中一个答案与您要问的问题相匹配 :)

关于C++ typeid 作为返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com