sfinae相关内容

SFINAE:当重载移动到其他命名空间时,检查函数是否存在中断

我想使用 SFINAE 检查特定命名空间中是否存在函数.我发现 SFINAE 可以测试来自另一个命名空间的免费函数 可以完成这项工作,但有些事情我不明白. 目前我有这个工作代码,直接来自链接的问题: //切换到0测试其他情况#define ENABLE_FOO_BAR 1命名空间 foo {#if ENABLE_FOO_BAR整数条();#万一}命名空间细节重载{模板 ..
发布时间:2022-01-14 23:43:45 C/C++开发

模板检测 T 是指针还是类

考虑以下代码: 类 MyClass{...};模板班级名单{上市:无效插入(常量对象 & x){//当 Object 为 MyClass 时调用}无效插入(常量对象 & x){//当 Object 为 MyClass* 时调用}}主函数(){我的类一个;列出lst;列出请;lst.插入(一);plst.insert(new Myclass);返回0; ..
发布时间:2022-01-12 15:47:06 C/C++开发

SFINAE 尝试使用 bool 给出编译器错误:“模板参数‘T::value’涉及模板参数";

我尝试使用 bool(不同于流行的 void_ 技巧): 模板结构解析{静态常量布尔值 = 假;};模板struct Resolve{静态常量布尔值 = 真;}; 目标是专门化,其中定义了 static const bool my_value = true; 的类.如果它们已定义 false 或未定义,则不要专门化它.即 struct B1 {//专门针对这种情况进行解析static co ..
发布时间:2021-12-31 22:25:25 C/C++开发

如何使用 sfinae 选择构造函数?

在模板元编程中,可以在返回类型上使用SFINAE来选择某个模板成员函数,即 template结构体{int sum() const noexcept{返回_sum();}私人的:int_data[N];模板类型名称 std::enable_if::type _sum() const noexcept{返回_sum()+_data[I];}模板类型名称 std::enable_ ..
发布时间:2021-12-30 15:17:49 C/C++开发

断言代码不能编译

简而言之: 如何编写测试,检查我的类是否不可复制或可复制分配,而只能移动和可移动分配? 一般来说: 如何编写测试以确保特定代码不会编译?像这样: //可移动但不可复制的类结构A{A(const A&) = 删除;A(A&&) {}};void DoCopy(){A a1;A a2 = a1;}void DoMove(){A a1;A a2 = std::move(a1);}无效 ..
发布时间:2021-12-24 15:15:45 C/C++开发

使用 SFINAE 进行模板类专业化

假设我有这些声明 template类用户;模板类数据; 并且想要为T = Data以及从DataUser> 但也允许在别处定义的其他专业化. 如果我还没有类模板User的声明,我可以简单地 template::value>::type>类用户{/*...*/}; 哪里 template数据>>结构 is_Data{ static const bool value =/* 这里有一些 ..
发布时间:2021-12-13 19:10:01 C/C++开发

模板特化和 enable_if 问题

我遇到了有关 enable_if 和模板特化的适当用法的问题. 修改示例后(出于保密原因),这是一个可比较的示例: 我有一个名为“less"的函数,用于检查第一个参数是否小于第二个参数arg.假设我想要两种不同的实现取决于输入的类型 - 1 个整数和另一个双倍. 到目前为止我的代码看起来像这样 - #include #include 模板 ..
发布时间:2021-12-13 18:46:01 C/C++开发

使用 enable_if 检查成员是否存在

这是我想要做的: template 结构模型{向量 T顶点;#if T 有一个 .normal 成员空变换(矩阵 m ){顶点中的每个顶点{顶点.pos = m * 顶点.pos ;vertex.normal = m * vertex.normal ;}}#万一#if T 没有 .normal 成员空变换(矩阵 m ){顶点中的每个顶点{顶点.pos = m * 顶点.pos ;}}#万一}; ..
发布时间:2021-12-13 18:42:45 C/C++开发

如何使用 SFINAE 检测类的存在?

是否可以使用 SFINAE 检测 C++ 中是否存在类?如果可能,那怎么做? 假设我们有一个仅由某些版本的库提供的类.我想知道是否可以使用 SFINAE 来检测该类是否存在.检测结果是任意的,比如一个枚举常量,如果存在则为1,否则为0. 解决方案 如果我们要求编译器告诉我们任何关于 T 的类类型即使被声明我们也一定会得到一个编译错误.没有办法围绕那个.因此,如果我们想知道 T 类是否 ..
发布时间:2021-12-13 18:39:22 C/C++开发

用 SFINAE 检测 constexpr

我正在升级一些 C++ 代码以利用 C++11 中的新功能.我有一个 trait 类,其中有几个函数返回基本类型,这些函数在大多数情况下(但并非总是)返回一个常量表达式.我想根据函数是否为 constexpr 来做不同的事情.我想出了以下方法: template结构测试{模板静态 std::true_type do_call(int){ return std::true_type();}静态 s ..
发布时间:2021-12-13 18:35:30 C/C++开发

为什么我应该在函数签名中避免 std::enable_if

Scott Meyers 发布了内容和状态他的下一本书 EC++11.他写道,书中的一项可能是“避免在函数签名中使用std::enable_if". std::enable_if 可用作函数参数、返回类型或类模板或函数模板参数,以有条件地从重载解析中删除函数或类. 在这个问题中显示了所有三个解决方案. 作为函数参数: template结构检查1{模板你读(类型名称 std::e ..
发布时间:2021-12-13 18:31:41 C/C++开发