sfinae相关内容
我的以下代码应该检测 T 是否有 begin 和 end 方法: 模板结构 is_container{模板 ;结构 sfinae {};模板静态字符测试(sfinae
..
考虑以下程序: #include 枚举类虚拟{};模板using EnableIf = typename std::enable_if::type;模板using DisableIf = typename std::enable_if::type;模板structdependent_true_typ
..
我想使用 SFINAE 检查特定命名空间中是否存在函数.我发现 SFINAE 可以测试来自另一个命名空间的免费函数 可以完成这项工作,但有些事情我不明白. 目前我有这个工作代码,直接来自链接的问题: //切换到0测试其他情况#define ENABLE_FOO_BAR 1命名空间 foo {#if ENABLE_FOO_BAR整数条();#万一}命名空间细节重载{模板
..
考虑以下代码: 类 MyClass{...};模板班级名单{上市:无效插入(常量对象 & x){//当 Object 为 MyClass 时调用}无效插入(常量对象 & x){//当 Object 为 MyClass* 时调用}}主函数(){我的类一个;列出lst;列出请;lst.插入(一);plst.insert(new Myclass);返回0;
..
我尝试使用 bool(不同于流行的 void_ 技巧): 模板结构解析{静态常量布尔值 = 假;};模板struct Resolve{静态常量布尔值 = 真;}; 目标是专门化,其中定义了 static const bool my_value = true; 的类.如果它们已定义 false 或未定义,则不要专门化它.即 struct B1 {//专门针对这种情况进行解析static co
..
在模板元编程中,可以在返回类型上使用SFINAE来选择某个模板成员函数,即 template结构体{int sum() const noexcept{返回_sum();}私人的:int_data[N];模板类型名称 std::enable_if::type _sum() const noexcept{返回_sum()+_data[I];}模板类型名称 std::enable_
..
简而言之: 如何编写测试,检查我的类是否不可复制或可复制分配,而只能移动和可移动分配? 一般来说: 如何编写测试以确保特定代码不会编译?像这样: //可移动但不可复制的类结构A{A(const A&) = 删除;A(A&&) {}};void DoCopy(){A a1;A a2 = a1;}void DoMove(){A a1;A a2 = std::move(a1);}无效
..
如何在编译时测试B类是否是从std::vector派生的? template结构 is_derived_from_vector {静态常量布尔值 = ????;}; 如何在编译时测试B类是否派生自模板族? 模板结构 is_derived_from_template {静态常量布尔值 = ????;}; 使用: template结构 X {};结构A:X{}结构 B : std::vect
..
我有以下情况可以使用 std::enable_if : template::value>::type* = nullptr>无效 f() { }模板::value>::type* = nullptr>无效 f() { } 现在,我在 cppreference 中看到了新语法,在我看来更清晰:typename = std::enable_if_t::va
..
假设我有这些声明 template类用户;模板类数据; 并且想要为T = Data以及从DataUser> 但也允许在别处定义的其他专业化. 如果我还没有类模板User的声明,我可以简单地 template::value>::type>类用户{/*...*/}; 哪里 template数据>>结构 is_Data{ static const bool value =/* 这里有一些
..
我想要几个重载的全局 to_string() 函数,它们采用某种类型的 T 并将其转换为它的字符串表示形式.对于一般情况,我希望能够写: template排队类型名称 enable_if::value&&has_insertion_operator::value,无效>::类型to_string( T const &t, OutputStringType
..
为什么这段代码有效: 模板::value, T>* = nullptr>无效添加(T){}模板::value, T>* = nullptr>无效添加(T){} 并且可以正确区分这两个调用: 添加(1);添加(1.0); 而以下代码如果编译会导致重新定义 Add() 错误? 模板::value, T>::type>无效添加(T){}模板::value, T>::type>无效添加(T){}
..
考虑以下代码: #include #include 模板 结构体{int val = 0;模板::type>A(int n) : val(n) {};一个(...) { }/* ... */};struct YES { constexpr static bool value = true;};struct NO
..
我遇到了有关 enable_if 和模板特化的适当用法的问题. 修改示例后(出于保密原因),这是一个可比较的示例: 我有一个名为“less"的函数,用于检查第一个参数是否小于第二个参数arg.假设我想要两种不同的实现取决于输入的类型 - 1 个整数和另一个双倍. 到目前为止我的代码看起来像这样 - #include #include 模板
..
这是我想要做的: template 结构模型{向量 T顶点;#if T 有一个 .normal 成员空变换(矩阵 m ){顶点中的每个顶点{顶点.pos = m * 顶点.pos ;vertex.normal = m * vertex.normal ;}}#万一#if T 没有 .normal 成员空变换(矩阵 m ){顶点中的每个顶点{顶点.pos = m * 顶点.pos ;}}#万一};
..
是否可以使用 SFINAE 检测 C++ 中是否存在类?如果可能,那怎么做? 假设我们有一个仅由某些版本的库提供的类.我想知道是否可以使用 SFINAE 来检测该类是否存在.检测结果是任意的,比如一个枚举常量,如果存在则为1,否则为0. 解决方案 如果我们要求编译器告诉我们任何关于 T 的类类型即使被声明我们也一定会得到一个编译错误.没有办法围绕那个.因此,如果我们想知道 T 类是否
..
是否可以编写一个值对所有常见 STL 结构(例如,vector、set、map、map、...)? 首先,我想编写一个类型特征,它对 vector 为真,否则为假.我试过这个,但它不能编译: template结构 is_vector {static bool const value = false;};模板struct is_vector>>::类型>{static bool
..
我正在升级一些 C++ 代码以利用 C++11 中的新功能.我有一个 trait 类,其中有几个函数返回基本类型,这些函数在大多数情况下(但并非总是)返回一个常量表达式.我想根据函数是否为 constexpr 来做不同的事情.我想出了以下方法: template结构测试{模板静态 std::true_type do_call(int){ return std::true_type();}静态 s
..
我正在尝试根据类模板参数确定调用哪个版本的成员函数.我试过这个: #include #include 模板结构点{void MyFunction(typename std::enable_if::value, T >::type* = 0){std::cout
..
Scott Meyers 发布了内容和状态他的下一本书 EC++11.他写道,书中的一项可能是“避免在函数签名中使用std::enable_if". std::enable_if 可用作函数参数、返回类型或类模板或函数模板参数,以有条件地从重载解析中删除函数或类. 在这个问题中显示了所有三个解决方案. 作为函数参数: template结构检查1{模板你读(类型名称 std::e
..