草庐IT

typetraits

全部标签

c++ - 公共(public)继承的静态断言

我构建了一个帮助类,它将通过模板构造一个自定义类,这个自定义类必须继承自某个类,我可以使用std::is_base_of进行检查。但是我还需要检查继承是否公开,如何实现?作为引用,这里是该类的精简版本,我在其中有std::is_base_of。templateclassSink{static_assert(std::is_base_of::value,"CustomSinkmustderivefromBaseSink");//SomestaticassertheretocheckifcustomsinkhaspubliclyinheritedBaseSink//static_asser

c++ - 公共(public)继承的静态断言

我构建了一个帮助类,它将通过模板构造一个自定义类,这个自定义类必须继承自某个类,我可以使用std::is_base_of进行检查。但是我还需要检查继承是否公开,如何实现?作为引用,这里是该类的精简版本,我在其中有std::is_base_of。templateclassSink{static_assert(std::is_base_of::value,"CustomSinkmustderivefromBaseSink");//SomestaticassertheretocheckifcustomsinkhaspubliclyinheritedBaseSink//static_asser

c++ - 在 vector <unique_ptr> 上使用 is_copy_constructible 误报

类型trait是否应该能够处理std::vector>之类的情况?并检测到它不是可复制的?这是https://ideone.com/gbcRUa的示例(运行g++4.8.1)#include#include#include#includeintmain(){//Thisprints1,implyingthatit'scopyconstructible,whenit'sclearlynotstd::cout>>::value如果这是is_copy_constructible的正确行为,有没有办法检测到复制结构是不正确的?好吧,不仅仅是让它无法编译。 最佳答案

c++ - 在 vector <unique_ptr> 上使用 is_copy_constructible 误报

类型trait是否应该能够处理std::vector>之类的情况?并检测到它不是可复制的?这是https://ideone.com/gbcRUa的示例(运行g++4.8.1)#include#include#include#includeintmain(){//Thisprints1,implyingthatit'scopyconstructible,whenit'sclearlynotstd::cout>>::value如果这是is_copy_constructible的正确行为,有没有办法检测到复制结构是不正确的?好吧,不仅仅是让它无法编译。 最佳答案

c++ - 如何在现代 C++ 中使用分配器

根据我在http://en.cppreference.com/w/cpp/memory/allocator中读到的内容,分配器的大多数功能现在都将被弃用。问题是,应该如何在新代码中使用分配器?现在什么是“正确”的方式?根据我在文档中的推断,construct是分配器特征的一部分,而不是分配器本身。我正在构建一个自定义容器,这里是一个非常简单的构造函数版本,这是新设计的一个很好的用法吗?container::container(std::size_tsize,Tconst&value,Allocatorconst&allocator):allocator_(allocator){data

c++ - 如何在现代 C++ 中使用分配器

根据我在http://en.cppreference.com/w/cpp/memory/allocator中读到的内容,分配器的大多数功能现在都将被弃用。问题是,应该如何在新代码中使用分配器?现在什么是“正确”的方式?根据我在文档中的推断,construct是分配器特征的一部分,而不是分配器本身。我正在构建一个自定义容器,这里是一个非常简单的构造函数版本,这是新设计的一个很好的用法吗?container::container(std::size_tsize,Tconst&value,Allocatorconst&allocator):allocator_(allocator){data

c++ - std::common_type 应该使用 std::decay 吗?

给定类型A,B,我关心std::common_type的确切定义,不考虑可变参数std::common_type对于任意类型A....所以让usingT=decltype(true?std::declval():std::declval());usingC=std::common_type;现在,根据一些消息来源,我发现了以下关系(为简洁起见,跳过typename):cppreference.com:C::type=std::decay::typecplusplus.com:C::type=TGCC4.8.1实现:C::type=std::decay::type如果T有效,否则C不包含

c++ - std::common_type 应该使用 std::decay 吗?

给定类型A,B,我关心std::common_type的确切定义,不考虑可变参数std::common_type对于任意类型A....所以让usingT=decltype(true?std::declval():std::declval());usingC=std::common_type;现在,根据一些消息来源,我发现了以下关系(为简洁起见,跳过typename):cppreference.com:C::type=std::decay::typecplusplus.com:C::type=TGCC4.8.1实现:C::type=std::decay::type如果T有效,否则C不包含

C++:为什么 numeric_limits 对它不知道的类型起作用?

我创建了自己的类型,没有任何比较器,也没有专门化std::numeric_limits.尽管如此,出于某种原因,std::numeric_limits编译得很好。为什么c++标准委员会定义numeric_limits模板,使其适用于所有类型,包括非数字类型?示例代码如下:#include#includeusingnamespacestd;//Thisisanintwrapperthatdefaultsto666insteadof0classA{public:intx;public:A():x(666){}};intmain(){Aa=std::numeric_limits::max()

C++:为什么 numeric_limits 对它不知道的类型起作用?

我创建了自己的类型,没有任何比较器,也没有专门化std::numeric_limits.尽管如此,出于某种原因,std::numeric_limits编译得很好。为什么c++标准委员会定义numeric_limits模板,使其适用于所有类型,包括非数字类型?示例代码如下:#include#includeusingnamespacestd;//Thisisanintwrapperthatdefaultsto666insteadof0classA{public:intx;public:A():x(666){}};intmain(){Aa=std::numeric_limits::max()