考虑以下代码:
我想使用enable_if来有选择地定义构造函数A::A(int),只针对某些类型。对于所有其他类型,应该使用默认构造函数A::A(...),这是编译器在替换失败时的默认情况。然而,对我来说,这在编译器(gcc版本4.9.0 20130714)中仍然有意义,因为它仍然在抱怨。
类似这样的构造函数是否可能?这是否可能使用其他构造函数(拷贝构造函数和移动构造函数)?
#include <iostream>
#include <type_traits>
template <typename T>
struct A {
int val = 0;
template <class = typename std::enable_if<T::value>::type>
A(int n) : val(n) {};
A(...) { }
/* ... */
};
struct YES { constexpr static bool value = true; };
struct NO { constexpr static bool value = false; };
int main() {
A<YES> y(10);
A<NO> n;
std::cout << "YES: " << y.val << std::endl
<< "NO: " << n.val << std::endl;
}
我想使用enable_if来有选择地定义构造函数A::A(int),只针对某些类型。对于所有其他类型,应该使用默认构造函数A::A(...),这是编译器在替换失败时的默认情况。然而,对我来说,这在编译器(gcc版本4.9.0 20130714)中仍然有意义,因为它仍然在抱怨。
类似这样的构造函数是否可能?这是否可能使用其他构造函数(拷贝构造函数和移动构造函数)?