jjzjj

typetraits

全部标签

c++ - 哪些适用于 Windows 的 C++11 编译器支持新的类型特征,例如 "is_nothrow_move_constructible"?

是否有支持新的C++11类型特征的适用于Windows的C++11编译器,例如is_nothrow_move_constructible?我试图编写一个支持它的容器,却发现我的编译器(VC++2010、TDMMinGW32GCC4.6)都不支持它... 最佳答案 对于mingw,我推荐STL'sdistrohere(海湾合作委员会4.7.1)。它还带有boost1.50。还有mingw-w64(原始mingw的一个分支),我推荐rubenvb'spersonalbuildshere.转到ToolchainstargettingWin

C++ STL type_traits 问题

我在看最新的C9lecture并注意到一些有趣的事情..在他对type_traits的介绍中,Stephan使用了以下(如他所说,人为的)示例:templatevoidfoo(Tt,true_type){std::coutvoidfoo(Tt,false_type){std::couttemplatevoidbar(Tt){foo(t,typenameis_integral::type());}这似乎比:复杂得多templatevoidfoo(Tt){if(std::is_integral::value)std::cout后一种做法有问题吗?他的方法更好吗?为什么?谢谢。

c++ - 是大括号可构造的类型特征

如何检查特定类型typenameT可以从参数构造typename...Args方式T{Args...}?我知道std::is_constructible来自的类型特征,但它适用于括号,而不适用于大括号。我在编写类型特征方面没有太多经验,因此无法提供初始示例。作为简化,我们可以接受任何合理的断言,即使这不会导致太大的普遍性损失。 最佳答案 templatedecltype(void(T{std::declval()...}),std::true_type())test(int);templatestd::false_typetest(

c++ - 是否可以确定类型是否为范围枚举类型?

是否有类型特征,或者是否可以编写类型特征is_scoped_enum这样:如果T是范围枚举,is_scoped_enum::value是true和如果T是任何其他类型,is_scoped_enum::value是假的 最佳答案 我认为测试它是否是枚举并且不能隐式转换为基础类型应该可以解决问题。template::value>structis_scoped_enum:std::false_type{};templatestructis_scoped_enum:std::integral_constant::type>::value>{

c++ - 使用类型特征时如何排列文件?

我第一次尝试在C++中实现特征,但我遇到了多个已定义符号的链接错误。errorLNK2005:"public:staticclassstd::unordered_mapconstManagerTrait::Fields"errorLNK2005:"public:staticclassstd::unordered_mapconstManagerTrait::Fields"errorLNK2005:"public:staticclassstd::unordered_mapconstManagerTrait::Fields"errorLNK2005:"public:staticclassst

c++ - 为什么 std::is_constructible 在直接上下文中停止?

源自this话题。也与此有关topic.我的问题是为什么std::is_constructible在直接上下文中停止?我认为std::is_constructible的用户会期望它能够深入工作并给出准确的答案。有了这个直接的上下文,你可能会让std::is_constructible给你一个绿灯,只是在你实际执行它时得到一个硬编译器错误。这是否违背了std::is_constructible的最初目标和目的。现在,它对我来说基本上看起来没用。我想std::looks_constructible_at_first_sight是当前语义的更好名称:( 最佳答案

c++ - 每当成员变量可以由可变参数构造时,有条件地启用构造函数

我有一个类foo使用模板参数Tuple我想提供一个可变参数构造函数来初始化一个成员变量m_elements类型Tuple,每当表达式m_elements{static_cast(std::forward(elements))...}已定义。我们可以通过以下方式做到这一点:templatestructfoo{usingvalue_type=typenameTuple::value_type;template(std::declval())...})>foo(Elements&&...elements):m_elements{static_cast(std::forward(element

c++ - 确保参数是控制台的输出流

我正在尝试制作一个用于颜色的流操纵器,以用于输出到控制台。它有效,改变了文本的颜色和背景:std::cout问题出在签名上:std::ostream&FgBlue(std::ostream&);此签名允许派生类,例如std::ostringstream也一样,但是没有办法改变字符串流的颜色。无论是否使用这样的参数调用该函数,都会更改控制台的颜色。因此,我想确保参数符合std::cout的内容,std::wcout等。如果更多std::ostream,我希望它是通用的对象将添加到future的标准中。我尝试了很多涉及std::is_same的事情和std::is_base_of,当前者不

c++ - 检测类型何时不需要调用其析构函数

我正在编写一个C++11STL兼容的分配器,我想知道如何检测不调用它们的析构函数(在allocator::destroy方法中)是安全的类型。)我已经编写了分配器(一个简单的分配器),据我所知,它确实有效。我问的原因是我在我的代码中收到警告(即在我的分配器的destroy方法中。)我在最高警告级别使用VS2013(vc12),警告是:warningC4100:'c':unreferencedformalparameter在这个方法中:templateclassMyAlloc{...templatevoiddestroy(C*c)//~C();}...};如您所见,警告和代码都非常简单明

c++ - 构建一个 vector 以允许未初始化的存储

假设我想构建一个vector容器,unlikestd::vector,允许未初始化的存储。容器的用法,比如vec,大概是这样的:用户明确声明vector应该像这样分配N个未初始化的元素:veca(N,no_init);在数据已知的某个时刻,用户显式地初始化位置n的元素使用参数args...:a.init(n,args...);或者,等效地,手动构造元素:new(&a[n])T(args...);其他操作可能会进行更大规模的初始化或复制(如std::uninitialized_copy),但这只是为了方便;基本的底层操作是相同的。完成一些任务后,vector可能会留下一些已初始化的元素,