typetraits相关内容
我了解它们对有关您实例化它们的类型的信息进行编码,但是它们如何工作?比如说类型特征std::is_class.它是如何工作的?所有实现似乎都是空的结构,我得承认我在挠头. 名称似乎足够描述性,因此我可以理解它们的含义,但是使用类型特征的典型情况是什么? 我找不到有关该主题的介绍性资源(或有关SO的问题).指针将不胜感激. 解决方案 某些类型特征,例如std::is_class,
..
如何确定类型是否从模板类派生?特别是,我需要确定模板参数是否具有std::basic_ostream作为基类.通常,std::is_base_of是用于作业的工具.但是,std::is_base_of仅适用于完整类型,不适用于类模板. 我正在寻找这样的东西. template bool is_based_in_basic_ostream( T&& t ) {
..
C ++ 20引入了 std::common_reference .目的是什么?有人可以举一个使用它的例子吗? 解决方案 common_reference是出于我的努力,提出了可容纳代理迭代器的STL迭代器的概念. 在STL中,迭代器具有两种相关的特殊类型:reference和value_type.前者是迭代器operator*的返回类型,而value_type是序列元素的(非常量,
..
当且仅当传入的T类型是类枚举时,如何才能实现其值成员为true的类型特征?虽然我知道例如 +T{}; 如果T是一个枚举将起作用,而如果它是一个枚举类则将失败,到目前为止,我找不到将其用于SFINAE的方法. 解决方案 基于您的+T{}测试: 选项1: 尾随返回类型的表达SFINAE: #include template
..
是否可以检查类型T是任意类型和大小的std::array? 我可以检查特定的数组,例如: is_same>::value 但是我想检查T是std::array的任何实例.如下所示(当然不会编译): is_same::value 有没有办法实现这一目标(也许不使用is_same)?
..
是否存在类型特征,或者可以编写如下类型特征is_scoped_enum: 如果T是作用域枚举,则is_scoped_enum::value是true和 如果T是其他任何类型,则is_scoped_enum::value为false 解决方案 我认为测试它是否为枚举 和不能隐式转换为基础类型的应该可以解决问题. template
..
是否可以写一个类型特征,例如is_callable,它告诉对象是否定义了operator()? 如果事先知道调用运算符的参数是很容易的,但通常情况下是不知道的. 我希望当且仅当至少定义了一个重载的调用运算符时,特征才能返回true. 该问题与之相关并且具有很好的答案,但是它不适用于所有类型(仅适用于int可转换类型).另外,std::is_function可以工作,但只能在适当的C +
..
我想知道我可以做什么类型的自检来检测仅由原始内存副本可分配的类型? 例如,据我所知,内置类型的元组(内置类型的元组和此类元组的元组)将属于此类别. 这样做的动机是,如果可能的话,我想传输原始字节. T t1(...); // not necessarely default constructible T t2(...); t1 = t2; // should be equivale
..
有时我发现有必要编写可应用于对象容器或此类容器的映射的通用例程(即处理映射中的每个容器).一种方法是为地图类型编写单独的例程,但是我认为拥有一个对两种类型的输入都适用的例程会更自然,更省时间: template auto foo(const T& items) { return foo(items, /* tag dispatch to map or no
..
问题 我正在尝试编写一个将 type 或 type name 用作输入的C ++宏,并提供 type 作为输出. 例如: REMOVE_NAME(int)应该是int REMOVE_NAME(int aNumber)也应该是int 我设法编写了一个这样的宏(在下面),它可以工作,但是我想知道我是否缺少一种更简单的方法来实现这一目标. #include
..
template class Base { static_assert(!std::is_default_constructible::value, "T must not be default constructible"); }; struct X1 : Base {}; struct X2 : Base
..
这是我 is_destructible_v : 的实现 template struct is_unknown_bound_array : std::false_type {}; template struct is_unknown_bound_array : std::true_type {}; template
..
在具有私有或受保护的析构函数的类型上, std::is_constructible 的预期结果是什么? 例如,即使只有一个朋友可以释放它,我仍然可以在堆上构造这样的对象: #include class Foo { friend void freeFoo(Foo*); public: Foo() {} private: //
..
C ++ 11提供了两个类型特征模板类:std::is_integer和std::is_integral.但是,我无法分辨它们之间的区别. 哪种类型(例如T)可以使std::is_integer::value为真,而使std::is_integral::value为假? 解决方案 std::is_integer不存在. 话虽这么说,std::numeric_l
..
编辑:我以“if / else”为例,有时可以在编译时解决(例如,当涉及静态值时,cf 模板 T numeric_
..
我试图从 使用 std :: experimental :: detect_or_t 。 我需要编译以下示例的编译器,选项,版本或库来从 http://en.cppreference.com/w/cpp/experimental/is_detected #include
..
C ++标准将函数对象定义为: 函数对象类型是一种对象类型,可以是$ b的类型在函数调用中$ b postfix-expression。 (链接) 首先,我想到函数对象是函子,但后来我意识到对于函数指针 ptr 类型 P (不是函数,而是函数指针), std :: is_object_v
是 true ,可以使用 ptr(Args ...)语法来调用。 我正确的说,函数指
..
template ServerTraits; 稍后我有我的服务器对象本身: 模板 class Server {...}; 我的问题是我的使用上面是我的命名错误?我的模板参数实际上是一个政策而不是特质? 什么时候模板参
..
可能重复: 是否可以编写一个C ++模板来检查函数的存在? 是否可以使用boost类型traits或一些其他机制来检查特定模板参数是否具有运算符/函数,例如 std :: vector 作为模板参数 operator [] ,而 std :: pair 解决方案 你不能通过类型特征来解决这个问题,因为你必须定义是否为每个可能的名称。 这里是列出的常见解决方案,但是有一个问
..
我有一个单元,它有 std :: is_trivial :: value; // true std :: is_trivially_copyable :: value; // true(在具有此特性的编译器上) 我想传递的是作为元组,例如 使用geodeticTuple = std :: tuple
..