typetraits相关内容
是否可以获取类的字段数? struct Base { char a ; int b; }; struct派生:基数{ std :: string c; }; static_assert(num_fields :: value == 2); static_assert(num_fields :: value == 1);
..
什么时候可以保证lambda是琐碎的? 我假设,如果仅捕获琐碎的类型或什么都不捕获,那将是琐碎的。我没有任何标准的支持。 我的动机是将某些代码从Visual C ++ 12迁移到14,并发现某些静态断言在执行时失败 示例: #include #include 使用命名空间std; int main() {
..
我创建了自己的类型,没有任何比较器,也没有 std :: numeric_limits 的特殊化。尽管如此,出于某些原因, std :: numeric_limits 可以正常编译。为什么c ++标准委员会将 numeric_limits 模板定义为对所有类型(包括非数字类型)均有效? 以下示例代码: #include #include
..
#include 使用命名空间std; int main() { static_assert(is_constructible :: value,“错误”); } 该代码无法使用GCC和Clang进行编译,但可以通过Visual C ++进行传递201
..
我正在尝试实现自己的 is_member_function_pointer ,但遇到了麻烦。 命名空间__实现 { //积分常数 template struct integer_constant { static constexpr T result = v; typedefintegral_constant类型; cons
..
到目前为止,我在网上找不到任何ELI5。对于一个学习项目,我想实现自己的is_constructible。 解决方案 来自 cppreference : [I] f变量定义 T obj(std :: declval()...); 格式正确,值等于设为 true ,否则 value 为 false 。 可以使用SFINAE技术来检查代码是否格式正确,例如 void_
..
我知道有很多可能的方法来检测类是否具有特定的功能,但对于我的具体情况,它们中的任何一种都不起作用。我当前执行的检查成员函数正确的实现,继承函数除外。 #include template class HasFoo { template 结构检查; 模板
..
为什么static_assert需要不在类定义之外? 失败代码 #include A类 { public: A(A&&)noexcept {} static_assert(std :: is_nothrow_move_constructible ::值,“ ERROR”); }; int main() { }
..
我正在尝试在此处编写代码,但使用C + +11个功能,没有Boost。 在此示例中工作 ,我尝试定义 response_trait ,并根据特征的结果进行条件编译。我该如何进行这项工作? #include 使用命名空间std; struct Vector {float x,y,z; }; struct Vertex {Vector pos; };
..
std :: is_assignable :: value == false 在符合标准的实现中(例如clang / libc ++,gcc / libstdc ++,但不是VS2012)。 直觉上,这意味着诸如 int x = 3; 的表达式无效。但是 is_assignable 的规范指出,赋值的两面都转换为 std :: add_rvalue_reference
..
我在某处听说过,使用新的C ++ 1z语法,很容易检查是否在可变参数模板参数包中传递了类型-显然,您可以使用接近一行的代码来完成此操作。这是真的?有哪些相关功能? (我尝试查看折叠表达式,但看不到如何在该问题中使用它们...) 这是我在C ++ 11中解决问题的方式供参考: #include template
..
我想写一个类型特征以检查某个类型是否具有成员 member 。如果成员是公开,则有许多方法可以做到这一点(例如 void_t ),这可能是 Yakk的 can_apply (最终可以称为 std :: is_detected ): 结构C { int成员; }; 模板 使用member_type = decltype(& T :: member);
..
如果参数是C ++函数对象(functor),如何静态推论? template 无效测试(F f){} 我尝试了 is_function< ; F> :: value ,但这不起作用。似乎也没有 is_functor 特质,所以也许不可能。我似乎只是在寻找特定的成员函数,在这种情况下,函数调用运算符是: F :: operator()。
..
是否可以检查在编译时是否已实例化模板类型,以便我可以在enable_if专业化中使用此信息? 假设我已经 模板 structknown_type {}; 如果在编译时实例化了known_type,我可以以某种方式定义其值为true的is_known_type吗? 解决方案 如果利用特定表达式可能会或可能不会在的地方使用的事实,则可以执
..
我想检查两种类型是否属于同一模板。例如,我希望下面的代码片段返回 true ,因为尽管内部元素的类型不同,但两个对象都是向量。 在编译时进行检查很重要(这就是该函数为constexpr的原因)。 #include #include #include 模板
..
我试图为std容器编写一个流运算符,主要是为了调试。 我有以下代码: #include #include #include #include #include #include #include
..
是否可以检测类是普通类型还是模板类型(元类型)的实例其中可能包含非类型参数?我想出了以下解决方案: #include template class> constexpr bool is_template() { 返回true; } 模板 constexpr bool is_templ
..
所以基本上,我现在有一个非常基本的通用类,目前正在测试type_traits标头。我目前正在尝试使某个函数可以使用某些类型,即暂时使用算术类型。 #include 模板 class Test { public: template 类型名称std :: enable_if
..
我正在尝试编写一个模板,如果T具有move构造函数,则该模板将表现为一种方式,如果T没有其构造,则其行为将呈现另一种方式。我试图寻找一种可以识别出这种特征的类型特征,但是没有运气,为此我尝试写出自己的类型特征的尝试失败了。 任何帮助表示感谢。 解决方案 我觉得有必要指出一个细微的区别。 虽然 确实提供了 std :: is_move_construc
..
是否可以确定我应该使用结构化绑定语法在方括号中指定多少个变量名,以匹配简单的右侧 struct 数据成员的数量我想成为通用库的一部分,该库使用结构化绑定将任意类分解为其组成部分。目前没有结构化绑定的可变版本(并且我认为不能针对当前的语法提出),但是我的第一个想法是对某些函数 decompose()进行重载。,它将 struct 参数分解为一组其成分。 decompose()应该重载参数数据成员(即
..