typetraits相关内容

C ++类型特征

我了解它们对有关您实例化它们的类型的信息进行编码,但是它们如何工作?比如说类型特征std::is_class.它是如何工作的?所有实现似乎都是空的结构,我得承认我在挠头. 名称似乎足够描述性,因此我可以理解它们的含义,但是使用类型特征的典型情况是什么? 我找不到有关该主题的介绍性资源(或有关SO的问题).指针将不胜感激. 解决方案 某些类型特征,例如std::is_class, ..
发布时间:2020-05-09 02:17:58 C/C++开发

C ++ 20 std :: common_reference的目的是什么?

C ++ 20引入了 std::common_reference .目的是什么?有人可以举一个使用它的例子吗? 解决方案 common_reference是出于我的努力,提出了可容纳代理迭代器的STL迭代器的概念. 在STL中,迭代器具有两种相关的特殊类型:reference和value_type.前者是迭代器operator*的返回类型,而value_type是序列元素的(非常量, ..
发布时间:2020-05-09 02:13:02 C/C++开发

如何实现is_enum_class类型特征?

当且仅当传入的T类型是类枚举时,如何才能实现其值成员为true的类型特征?虽然我知道例如 +T{}; 如果T是一个枚举将起作用,而如果它是一个枚举类则将失败,到目前为止,我找不到将其用于SFINAE的方法. 解决方案 基于您的+T{}测试: 选项1: 尾随返回类型的表达SFINAE: #include template ..
发布时间:2020-05-09 02:12:02 C/C++开发

找出C ++对象是否可调用

是否可以写一个类型特征,例如is_callable,它告诉对象是否定义了operator()? 如果事先知道调用运算符的参数是很容易的,但通常情况下是不知道的. 我希望当且仅当至少定义了一个重载的调用运算符时,特征才能返回true. 该问题与之相关并且具有很好的答案,但是它不适用于所有类型(仅适用于int可转换类型).另外,std::is_function可以工作,但只能在适当的C + ..
发布时间:2020-05-09 02:08:45 C/C++开发

哪种类型特征表明该类型是memcpy可分配的? (元组,一对)

我想知道我可以做什么类型的自检来检测仅由原始内存副本可分配的类型? 例如,据我所知,内置类型的元组(内置类型的元组和此类元组的元组)将属于此类别. 这样做的动机是,如果可能的话,我想传输原始字节. T t1(...); // not necessarely default constructible T t2(...); t1 = t2; // should be equivale ..
发布时间:2020-05-08 18:48:14 C/C++开发

检查类型是否为地图

有时我发现有必要编写可应用于对象容器或此类容器的映射的通用例程(即处理映射中的每个容器).一种方法是为地图类型编写单独的例程,但是我认为拥有一个对两种类型的输入都适用的例程会更自然,更省时间: template auto foo(const T& items) { return foo(items, /* tag dispatch to map or no ..
发布时间:2020-05-05 13:31:23 C/C++开发

宏以获取表达式的类型

问题 我正在尝试编写一个将 type 或 type name 用作输入的C ++宏,并提供 type 作为输出. 例如: REMOVE_NAME(int)应该是int REMOVE_NAME(int aNumber)也应该是int 我设法编写了一个这样的宏(在下面),它可以工作,但是我想知道我是否缺少一种更简单的方法来实现这一目标. #include ..
发布时间:2020-05-05 09:08:57 C/C++开发

函数指针是C ++中的函数对象吗?

C ++标准将函数对象定义为: 函数对象类型是一种对象类型,可以是$ b的类型在函数调用中$ b postfix-expression。 (链接) 首先,我想到函数对象是函子,但后来我意识到对于函数指针 ptr 类型 P (不是函数,而是函数指针), std :: is_object_v 是 true ,可以使用 ptr(Args ...)语法来调用。 我正确的说,函数指 ..
发布时间:2018-04-17 11:23:47 C/C++开发

C ++类型traits以检查类是否具有运算符/成员

可能重复: 是否可以编写一个C ++模板来检查函数的存在? 是否可以使用boost类型traits或一些其他机制来检查特定模板参数是否具有运算符/函数,例如 std :: vector 作为模板参数 operator [] ,而 std :: pair 解决方案 你不能通过类型特征来解决这个问题,因为你必须定义是否为每个可能的名称。 这里是列出的常见解决方案,但是有一个问 ..
发布时间:2016-11-23 16:37:01 C/C++开发