是否可以为其模板类的特定特化指定模板构造函数 ONLY ? 我有这段代码:
template <typename T>
class A {
public:
A(std::function<T()> f) : x(f) {}
template <typename Y>
A<void>(Y* x) : x(x) {}
private:
boost::variant<int*, char*, std::function<T()>> x;
}
我试图让第二个构造函数只针对非std :: function参数进行编译,这就是为什么我试图找到一种方法来明确地告诉编译器T应该是无效的情况,但显然这不会编译。
答案 0 :(得分:0)
您可以使用SFINAE和其他参数以及默认值
template <typename T>
struct is_std_function : public std::false_type {};
template <typename T>
struct is_std_function<std::function<T> > : public std::true_type{};
template <typename T>
class A {
public:
A(std::function<T()> f) : x(f) {}
template <typename Y>
A(Y* x, typename std::enable_if< !is_std_function<Y>::value >::type * = 0) : x(x) {}
private:
boost::variant<int*, char*, std::function<T()>> x;
}
现在对于std函数类型,由于第二个参数,你的构造函数不能被专门化。