- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我很感兴趣这件事在理论上是如何运作的。示例:
#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
是一个 enum
和 false
否则。 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/
我正在尝试实现 std::is_enum .到目前为止,这是我的代码: template struct is_enum { static bool value; }; template boo
我很感兴趣这件事在理论上是如何运作的。示例: #include #include enum foo { AAA, BBB }; typedef foo bar; struct sf
当我尝试编译时,G++编译器显示以下错误: C:\wx\include\wx\strvararg.h|350|error: 'is_enum' in namespace 'std' does not
MCVE: #include template bool func( typename std::enable_if::value, T >::type &t, int x ) { } enum c
我是一名优秀的程序员,十分优秀!