这个类:
template <class T>
struct A {
A() : t(T()) {
}
A(const T& t_) : t(t_) {
}
T t;
};
如果T没有默认构造函数,则无法编译。
template <class T>
struct A {
A(const T& t_) : t(t_) {
}
T t;
};
即使T有默认构造函数,也不会有默认构造函数。
我希望两者都存在——如果没有T(),我就不想要A()。
我知道必须使用SFINAE。Boost.traits和Boost.enable_if可以帮助,但我无法使其正常工作。有人能给我一个这个简单案例的例子吗?
A()
但没有T()
,它会失败;如果你不尝试使用它,它就不会失败。另一个改进是:目前你的类需要T
的复制构造函数,你可以通过写入t()
而不是t(T())
来解决这个问题。 - Johannes Schaub - litb