11得票1回答
正确的Container::reserve()函数签名 / 检测其是否存在

假设已有一个满足STL标准的容器类型C,如何正确检测C是否含有成员函数reserve?我尝试了以下方法(使用GCC 4.6.3):template< typename C, typename = void > struct has_reserve : std::false_ty...

11得票1回答
如何禁用某些模板类型的类成员函数

看起来很简单,但是我在std::enable_if的语法方面遇到了一些困难。 实际上情况非常简单。 一个带有模板参数T的模板类。 两个函数不应该为一个特定类型的T实现。 这两个函数没有T的参数或返回值。 一个函数接受一个int,另一个函数返回一个int。 有什么简单的例子吗? 还...

11得票1回答
为什么std::is_rvalue_reference不能如宣传所述完成其功能?

例如,如果我有: #include <type_traits> struct OwnershipReceiver { template <typename T, class = typename std::enable_if ...

10得票2回答
消除多继承中类成员的二义性

假设我有这个可变参数的基类模板: template <typename ... Types> class Base { public: // The member foo() can only be called when its template // par...

10得票3回答
可否在变长函数模板中使用'enable_if'和'is_same'?

这两个非变参函数模板确实可以编译: template <typename T, typename U> typename std::enable_if<std::is_same<U, int>::value, void>:: type testFuncti...

10得票1回答
使用C++11的std::enable_if使成员函数在vector特定长度时启用

我正在编写一个简单的向量类,我希望拥有一些仅适用于特定长度向量的成员函数(例如三元素向量的叉积)。我偶然发现了std::enable_if,它看起来可以实现我的要求,但我似乎无法正确使用它。 #include <iostream> #include <type_traits...

10得票1回答
使用enable_if和重载实现SFINAE

我已经查找了一些资料,但是无法找到解决我的具体问题的方法。 这是我的代码: template <typename T> typename std::enable_if<std::is_arithmetic<T>::value || std::is_enum&l...

10得票1回答
为模板可能包装的容器提供initializer_list构造支持(可选)

如果我有一个包装标准容器的模板,似乎我可以相对容易地委托initializer_list构造函数: template<typename T> struct holder { T t_; holder() : t_() {} holder...

10得票2回答
enable_if:没有参数的void成员函数的最小示例

我正在努力理解C++11中的std::enable_if,并尝试编写一个最小化示例:一个名为A的类,它有一个成员函数void foo(),根据类模板中的类型T具有不同的实现。 以下代码提供了所需的结果,但我还没有完全理解它。为什么版本V2可以工作,而V1不能?为什么需要“冗余”的类型U? #...

9得票3回答
C++中针对非类型模板参数的enable_if

我对部分模板特化有些困惑... 我有一些代码依赖于算术数据类型T和一个小的整数DIM,我希望能够为不同的DIM值指定不同的类方法。无法使用部分模板特化导致我探索enable_if。它正是我所需要的... 但我想要它返回一个数字而不是类型。我该怎么做?以下代码应该说明我的需求。 #includ...