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