typetraits相关内容
C ++标准库具有 std :: is_constructible 检查是否可以根据给定的类型构造一个类作为参数. 例如,如果我有一个类 MyClass ,它具有一个构造函数 MyClass(int,char),则 std :: is_constructible :: value 将为 true . 是否存在类似的标准库类
..
如何检查某个类型是否可以从其他类型显式构造(反之亦然)?在这种情况下,有什么SFINAE技巧吗? 我可以将 is_explicitly_constructible 编写为 std的组合::is_constructible 和 std :: is_convertible : #include模板struct is_
..
C ++ 11给了我们 std :: add_const ;使用C ++ 17,我们有了一个新结构- std :: as_const() .前者只是在为其提供类型之前加上 const .第二个是适当的(一个a的模板)函数,而不是类型特征,它似乎可以做到这一点-除了当类型是右值引用时(在这种情况下,它不能使用). 我不太了解提供 std :: as_const()的动机.为什么除了 std :
..
为什么 char * pstr ="hello";pushArg(pstr); 仍会调用此类模板吗? 您看到已经有&(!std :: is_same>>> ::: value). 模板
..
在我的最后一个问题中,我在使模板专业化工作.现在我需要一点扩展.我想要这些语句有两个专业化: int main(){//第一次专业化holder_exth1;holder_exth2;holder_exth3;//第二个专业化holder_ext
..
我目前正在编写一个接口类,该类应提供对作为const或非const引用的复杂结构内部元素的访问.这个想法是,某些模块被授予const访问权限,而某些模块被授予完全访问权限. 我已经使用了'type_traits''std :: add_const'有条件地限定内部成员函数的返回类型,不幸的是,我无法想到一种有条件地将成员函数限定为const或non-const的方法. 这甚至有可能吗?
..
我正在寻找"is_comparable"类型特征,但找不到任何特征. 构建一个用于检查是否为类实现了 operator == 的代码非常容易,但这不包括全局定义的运算符. 是否不可能实现is_comparable typetait? 解决方案 我认为这是一个特征,对于两种类型的 L 和 R 这些类型的对象 lhs 和 rhs 如果满足以下条件,将产生 true lhs == r
..
我想写一个类型特征,它使用SFINAE来检查类型是否存在下标表达式.当可能使用下标表达式时,我下面的最初尝试似乎可行,但是当不使用方括号运算符时,我的以下尝试不可行. #include#include#include模板结构has_subscript_operator_impl{模板
..
我想创建一个班级模板 模板X类{//这里,我将使用T :: value(除其他外)}; T :: value 通常是constexpr静态变量,但并非总是如此. T :: value 必须为正值,所以我想让人们尽可能地在编译过程中知道它. 如果 T :: value 始终是constexpr,我将像 那样添加 static_assert static_asse
..
我正在尝试编写模板 is_c_str 来测试类型是否为c样式的字符串.我需要这样做来尝试编写to_string函数,如我的其他问题所示: STL容器的迭代器的模板专业化吗?. 我需要区分c_str以及其他类型的指针和迭代器,以便可以将第一个表示为面值,并将指针/迭代器呈现为不透明的“监视器"或"ptr".代码如下: #include模板struct is_
..
C ++中的特征封装了一系列操作,这些操作允许算法或数据结构以实例化该类型的类型进行操作. char_traits 是将 string -和文件所需功能分组的示例. 但并非所有特征的名称中都带有“特征",对吗?我想到了 numeric_limits .这也是“特质"吗?即使其中没有名称"trait"? 那么,还有其他可以/应该被认为是“特质"的模板吗?除了我发现的示例之外:
..
MSVC为以下代码产生错误(“功能模板已定义"): template :: value>>自动foo(T& val){返回0;}//注意与上方的区别--->!模板
..
我有以下代码实现以下类型特征: 类型为 std :: vector 类型为整数的 std :: vector 它可以工作,但是很冗长. 有没有使用概念写这个的更短/更巧妙的方法? 我知道我可以从range-v3或其他类似的库中窃取概念,但是让我们假设我想自己实现它. #include#include#include
..
在 C ++ 中编写类似库的代码,我发现 copy_cv_reference_t 类型特征特别有必要: struct A;结构B;static_assert(std :: is_same {});static_assert(std :: is_same
..
我有一个采用模板类型来确定返回值的函数.有没有办法在编译时判断模板类型是否是模板类的实例化? 例如. class First {/* ... */};模板第二类{/* ... */};使用MyType = boost :: variant
..
我想定义一个接受所有可调用对象的概念。 这是我到目前为止所做的: template 概念Func = std :: is_function_v> || (需要(F f){ std :: is_function_v
..
我写了一些代码来检查自由函数的签名是否等于成员函数的签名,等等。它比较提取的返回类型和函数参数: #include #include template struct signature_trait; template struct s
..
#include #include 使用命名空间std; void f(int n = 7) {} void g(function fn) { fn(); //与f(7) 相同} template 自动GetDefaultArg(Callable fn,
..
我正在使用此成员函数获取指向对象的指针: 虚拟对象* Create() { 返回new Object(); } 它是虚拟的,因此我可以获取指向派生对象的指针,现在我这样做是这样的: 虚拟对象* Create() { return new Foo(); } 它可以正常工作,但我想这样做是为了防止任何错误,并且还可以简化操作,因此我不必在每次创建新类时
..
Context (1)可以提取具有以下特征的可调用对象的返回类型和参数类型: #include template struct callable_trait {}; template struct callable_trait { usi
..