197得票9回答
std::enable_if用于条件编译成员函数。

我正在尝试找一个简单的例子来理解如何使用std::enable_if。在阅读了this answer之后,我认为应该不难想出一个简单的例子。我想使用std::enable_if来选择两个成员函数,并且只允许使用其中一个。 不幸的是,下面的代码在gcc 4.7上无法编译,经过数个小时的尝试之后...

180得票5回答
为什么应该避免在函数签名中使用std::enable_if?

Scott Meyers发布了他的下一本书EC++11的内容和状态。他写道,书中的一项可能是“避免在函数签名中使用std::enable_if”。 std::enable_if可以用作函数参数、返回类型或类模板或函数模板参数,以有条件地从重载解析中删除函数或类。 这个问题中展示了所有三种解...

68得票3回答
使用 enable_if 选择类构造函数

考虑以下代码: #include <iostream> #include <type_traits> template <typename T> struct A { int val = 0; template <class = ...

50得票2回答
在C++中使用SFINAE的方法

我在一个项目中大量使用SFINAE函数,但不确定以下两种方法之间是否有任何区别(除了风格之外)。 #include <cstdlib> #include <type_traits> #include <iostream> template <cla...

44得票4回答
为什么在模板参数中使用 enable_if_t 会抱怨重定义?

我有以下使用std::enable_if的案例: template<typename T, typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr> vo...

39得票11回答
如何编写类型特征 `is_container` 或 `is_vector`?

您好!以下是您需要翻译的内容: 是否有可能编写一个类型特征,其对所有常见的STL结构(例如 vector, set, map等)的值都为true? 为了开始,我想编写一个类型特征,它对vector返回true,否则返回false。我尝试了这个方法,但它不能编译: template<...

38得票3回答
std::enable_if: 参数 vs 模板参数

我正在构建一些输入检查器,需要具有整数和/或双精度的特定功能(例如,“isPrime”只能用于整数)。 如果我使用enable_if作为参数,它完美地工作: template <class T> class check { public: template< cla...

36得票2回答
使用模板参数添加/删除数据成员?

考虑以下代码:template<bool AddMembers> class MyClass { public: void myFunction(); template<class = typename std::enable_if&l...

34得票5回答
如何使用SFINAE来选择构造函数?

在模板元编程中,可以使用SFINAE(Substitution Failure Is Not An Error)在返回类型上选择特定的模板成员函数。 template<int N> struct A { int sum() const noexcept { return ...

33得票6回答
使用不同的enable_if条件选择成员函数

我正在尝试根据类模板参数确定调用哪个成员函数的版本。我已经尝试了这个方法: #include <iostream> #include <type_traits> template<typename T> struct Point { void MyF...