19得票4回答
如何在具有自我推断返回类型的情况下使用std::enable_if?

C++14将拥有根据返回值推断返回类型的函数。 auto function(){ return "hello world"; } 我能将这种行为应用于使用 enable_if进行SFINAE返回类型惯用语的函数吗? 例如,让我们考虑以下两个函数: #include <t...

18得票2回答
根据模板启用类成员

我已经知道,您可以使用std::enable_if启用(或不启用)类的方法。 例如:template<size_t D, size_t E> class Field { ... size_t offset(const std::array<float,D>&...

17得票2回答
当使用std :: enable_if作为模板参数时的默认模板参数:为什么两个模板函数仅在enable_if参数上不同就可以?

在cppreference上的std::enable_if语言参考中包含以下注释: “注意事项:一个常见错误是声明两个函数模板,它们仅在其默认模板参数方面不同。这是非法的,因为默认模板参数不是函数模板签名的一部分,并且声明具有相同签名的两个不同函数模板是非法的。” 在下面的模板函数示例中,...

17得票4回答
enable_if和类型转换运算符?

有没有可能在类型转换运算符中使用enable_if?这似乎很棘手,因为返回类型和参数列表都是隐式的。

17得票3回答
完美转发setter的正确`enable_if`约束是什么?

Herb Sutter的CppCon演讲Back to the Basics!现代C++必备要素讨论了不同的参数传递选项,并比较了它们在性能和编写/教学难度方面的差异。 '高级'选项(在所有测试案例中提供最佳性能,但对大多数开发人员来说太难写)是完美转发,其中给出了示例(PDF, pg. 28...

16得票3回答
在使用`std::enable_if`时,我如何避免编写`::value`和`::type`? [cppx]

注意:这是一个带有答案的问题,目的是记录一种可能对他人有用的技术,并了解其他更好的解决方案。请随意添加评论或问题。也请随意添加其他答案。:) 在我的一些代码中,特别是头文件rfc/cppx/text/String.h中,我发现了以下神秘的片段: template< class S, ...

14得票3回答
如何使用SFINAE选择最接近匹配的类型特征?

场景: 我有各种类型可以归类为序列容器。 所有序列容器都是数据结构,但并非每个数据结构都是序列容器。 这里有一个代码示例来说明。此示例中唯一的“重要类型”是Array_T。它属于两个类别:它是一个序列容器,由于所有序列容器都是数据结构,因此它反过来也是一个数据结构。 //A sequenc...

14得票2回答
使用SFINAE实现转换运算符使能

我正在尝试使用SFINAE重载operator T(),以便在T是基本类型时返回一个副本,而在T是类时返回一个常量引用。 在下面的示例中使用double时,我无法删除第二个重载(带有std::is_class)。 也就是说,我遇到的错误是: error: no type named ‘t...

13得票1回答
C++ - 遍历元组和类型与常量参数的解析

我目前正在为元组编写算术运算符重载。该运算符迭代元组以对其每个单独元素执行操作。以下是 += 运算符的定义:template< typename... Ts, std::size_t I = 0 > inline typename std::enable_if< I == s...

13得票1回答
我可以为不同类型集合定义模板吗?

我需要编写一个模板函数,根据其参数的类别表现出不同的行为:template<class ContainerType> bool myFunc(ContainerType in){ //do some stuff } template<class NotAContainerT...