typetraits相关内容
我可以使用C ++ Type Traits来检查类型是否是类似STL的容器?我已经知道了GCC的内置 __ is_class ,但我想是如果可能的话更具体一点。 解决方案 您可以创建自己的traits类来检查集装箱接口的类型。这将涉及验证,某些相关类型(如集装箱:迭代)存在并验证某些表达式(如 container.empty())是有效的(即,他们编译没有错误)。各种SFINAE技术可用于
..
is_convertible 与 is_assignable 之间有什么区别? 为什么, in vs2012 is_convertible是false is_assignable is true 在gcc4.7.2中 is_convertible是false is_a
..
我是新写的模板元编程代码(而不是只读它)。所以我运行一些noob问题。其中一个很好地总结了这个非SO的帖子叫 (注意:我给了我的SFINAE发生了什么事?方法不同的名称只能帮助我的错误诊断在这个“思想实验”示例。请参阅 @ R.MartinhoFernandes的说明为什么您实际上不会在实际中为非重载选择此方法。) #include
..
请考虑以下内容: struct A { typedef int foo; }; struct B {}; template struct C {}; 我想要专门化C,以便C
..
C ++ 11提供标准 。 其中哪些不可能无需编译器挂钩即可实现? 注意1:通过编译器挂钩我是指任何非标准的语言功能,如 __ is_builtin ... 。 注意2:其中许多可以无钩子实现(请参阅 C ++模板元编程的第2章和/或第2章现代C ++设计)。 注意3: spraff answer 在此前问题中引用
..
我需要一个类型trait来检查参数包中的所有类型是否都是可复制的。这是我到目前为止做的。主要功能包含一些测试用例,以检查功能。 #include #include #include template struct areCopyConstructible; 模
..
在模板类中的函数中,我试图区分原始类型和其他类型。 在c ++ 11中,您可以: if(std :: is_fundamental :: value) { //将其视为原始 } else { //否则 } 请更正我,如果我错了,这不仅是在c ++ 11。 在早期版本的c ++中有另外一个选择吗? 解决方案 您可以使用 Boo
..
以下程序在使用GCC 4.7和clang 3.2编译时会生成“1”作为输出。 #include struct foo { template foo(T){ static_assert(not std :: is_same(),“no ints please”); } }; #include
..
在现代STL中有 std :: is_base_of 。它允许我们确定第二个参数是从第一个参数派生,还是它们是相同的类,否则,确定它们之间没有这样的关系。 是否可以确定一个类是否来自某个具体的模板类,而无需区分哪个具体的实际参数涉及到它的专业化? 说, / p> 模板 struct B {}; 和 temp
..
如果类型特征能够处理诸如 std :: vector > 并检测到它不是可复制构造的? 以下是 https://ideone.com/gbcRUa (运行g ++ 4.8.1) #include #include #include #include
..
如何在编译时测试类B是否来自std :: vector? template struct is_derived_from_vector { static const bool value = ???? }; 如何在编译时测试类B是否派生自模板族? 模板 class Family> s
..
给定类型 A,B ,我关心 std :: common_type,忽略任意类型 A ... std :: common_type >。所以让 使用T = decltype(true?std :: declval():std :: declval
..
回答这个问题后,我试图找到在Boost库中的is_complete 模板,我意识到在Boost.TypeTraits中没有这样的模板。为什么Boost库中没有这样的模板?它应该是什么样子? //!检查类型是否完整 模板 struct is_complete { static const bool value =(sizeof(T)> 0); };
..
我想要可变参数模板参数必须是唯一的。 我知道当多继承时,不允许相同的类继承。 struct A {}; struct B:A,A {}; //错误 使用这条规则,我做了一些代码。 #include 模板 struct id {}; template struct base_all:id
..
我已经看到,为了检查类型 T 是一个类,我可以使用 bool isClass = std :: is_class :: value; 对于类和结构体都返回true。我知道在C ++他们几乎是一样的东西,但我想知道为什么他们之间没有区别在类型特征。 解决方案 对于类和结构体都返回true。我知道在C ++他们几乎是一样的东西,但我想知道为什么他们之
..
编辑,以避免混淆: decltype 会不接受两个参数。请参阅解答。 以下两个结构可用于检查类型 T 在编译期间: //非模板化辅助结构: struct _test_has_foo { template 静态自动测试(T * p) - > decltype(p> foo(),std :: true_type()); template
..
具体来说,我想确定 new T是什么?对于任何模板参数 T ,不同于 new T()。哪个类型特征 is_trivial , is_standard_layout 和 is_pod 我选择? (作为一个侧面的问题,这些类型traits是否可以没有编译器魔法?) 解决方案 我不认为它可以用真正的外行人的术语,至少没有一个很多额外的解释。一个重要的点是静态和动态初始化,但解释说,对一个外
..
背景:我创建了以下类 C ,其构造函数应该 N B& 的变量: class B { A * getA(); }; template class C { public: template inline C(Args& ... args): member {args.getA()...} {
..
在 http://stackoverflow.com/a/1967183/134841 中,提供了一种解决方案,用于静态检查成员存在,可能在类型的子类中: template class has_resize_method { class yes {char m;}; class no {yes m [2];}; struct BaseMix
..
以下代码如何工作? typedef char(& yes)[1] typedef char(& no)[2]; template struct Host { 运算符B *()const; operator D *(); }; template struct
..