C ++
有人可以解释我如何has_trivial_default_constructor
作品? 我试图在boost实现中找到它,但不幸的是,有太多的宏,我只是迷路了...
如何有人可以使用模板在C ++中检测trivial_default_constructor
?
我需要一个C ++ 03而不是11的例子。
#include <boost/type_traits.hpp>
#include <boost/static_assert.hpp>
struct A{
A(){}
int a;
//std::vector< int > b;
};
int main(int argc, char* argv[])
{
struct B{
std::vector< int > b;
};
bool result = boost::has_trivial_default_constructor<A>::value;
//std::forward(&test);
return 0;
}
事实上,这是不可能的(纯C ++)。
使用SFINAE检测类型是否具有默认构造函数是可能的,因为它只涉及接口,但检测它是否微不足道会涉及到实现。
因此,编译器必须为此提供特定的内在因素。 你可以在这里找到一个内部函数列表,注意提供了一些函数,因为它们需要编译器干预,而其他函数可能只是提供一个统一集合或简化标准库实现。
您正在寻找的特定内在因素是__has_trivial_constructor
,它也受gcc和MSVC支持(根据注释或__is_trivially_constructible
(Clang的具体情况))。 我必须承认对前者有些不确定(如果该类型有几个构造函数呢?),后者可以用作:
template <typename T>
struct has_trivial_default_constructor {
static bool const value = __is_trivially_constructible(T);
};
链接地址: http://www.djcxy.com/p/19281.html
上一篇: c++
下一篇: Font color by classes on li are not rendered until unfocus in Chrome