gpt4 book ai didi

c++ - 我可以使用 typeid() 来知道一个类型是否是枚举吗?

转载 作者:行者123 更新时间:2023-11-30 00:56:10 25 4
gpt4 key购买 nike

我能否使用 typeid/type_info 以某种方式检测某种类型是否为 enum(任何枚举器)?

以下可以很好地检测变量是否具有类型 int

template<typename T>
bool is_int( T var )
{
return strcmp( typeid(T).name(), typeid(int).name() ) == 0;
}

但我不能对枚举使用类似的版本 - name() 返回的字符串在 Linux 和 Windows 之间不同

template<typename T>
bool is_enum( T var )
{
// can I use typeid here?
// eg. string_contains( typeid(var).name(), "enum" );
}

我已经在 Boost 中看到了模板化版本,但是我们还不能使用这个库...

最佳答案

您的方法有两个问题:

  • 您假设名称是唯一的。它们不是(至少,标准不保证它们是)。
  • 您假设因为您可以检测到一种类型,所以您可以检测具有相同机制的家族。

如果您想知道变量的静态类型,编译时机制可能是最好的。为此有特定的 C++11 特征:std::is_enum<T>有一个 value静态成员将是 truefalse取决于是否T是一个 enum还是不是。

关于c++ - 我可以使用 typeid() 来知道一个类型是否是枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10833600/

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