gpt4 book ai didi

c++ - boost::is_enum 它是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 18:27:30 26 4
gpt4 key购买 nike

我很感兴趣这件事在理论上是如何运作的。示例:

#include <boost/type_traits/is_enum.hpp>
#include <iostream>

enum foo
{
AAA,
BBB
};

typedef foo bar;

struct sfoo {
enum bar {
CCC
};
};

int main()
{
std::cout << boost::is_enum<foo>::value << "\n"; // 1
std::cout << boost::is_enum<bar>::value << "\n"; // 1
std::cout << boost::is_enum<sfoo>::value << "\n"; // 0
std::cout << boost::is_enum<int>::value << "\n"; // 0
std::cout << boost::is_enum<sfoo::bar>::value << "\n"; // 1
return 0;
}

我尝试探索源代码,但它太难了(宏 + 模板代码导航失败)。有人可以得到理论探索它是如何工作的?我不知道如何实现。

最佳答案

您遇到了很多宏,因为 Boost 正在为它支持的所有平台在编译器内部函数之间切换。例如,Visual C++ 定义了 __is_enum(T)这将返回 true如果T是一个 enumfalse否则。 MSDN 有一个 list Visual C++ 为支持类型特性而实现的此类内部函数。

is_enum 现在是 C++11 的一部分,并包含在 type_traits 中 header 。查看标准库实现很可能比查看 Boost 头文件更容易。

编辑:
我找到了 Boost 实现;它位于 <boost_path>\boost\type_traits\intrinsics.hpp .在该文件中搜索 BOOST_IS_ENUM在此文件中,您将看到由各种编译器实现的编译器内在函数。有趣的是,似乎所有人都将这个特定的实现为 __is_enum(T) .

关于c++ - boost::is_enum 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13082635/

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