boost :: is_enum如何工作
boost::is_enum how it works?
我很有趣的是,这东西在理论上是如何工作的。示例:
#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)
,如果T
是enum
和false
,它将返回true
。MSDN具有此类内在列表,可视化C 实现类型特质支持。
is_enum
现在是C 11的一部分,并包含在type_traits
标题中。浏览您的标准库实现很可能比Boost标头更容易。
编辑:
我发现了提升实施;它位于<boost_path>boosttype_traitsintrinsics.hpp
中。在此文件中搜索此文件以查找BOOST_IS_ENUM
,您将看到各种编译器实现的编译器。有趣的是,似乎所有这些都以__is_enum(T)
的方式实现了这一特定。
boost::is_enum
像 std::is_enum
一样实现。它需要一些编译器魔术。检查以下链接,该链接具有相同的问题和一个实现:IS_ENUM实现
我没有详细介绍升压代码,但是它似乎正在使用简单的消除:枚举是不是算术的(内置整数和浮点类型和指针)),不是引用,不是函数,不是类或联合,而不是数组。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?