【发布时间】:2017-11-16 18:10:33
【问题描述】:
我喜欢将我的类的声明和实现分开。我知道类模板和函数的实现也要进入头文件,这不是问题。
我在实现这个类时遇到了问题:
template <size_t S, std::enable_if_t<(S > 0), int> = 0>
class Foo {
public:
Foo();
}
到目前为止我已经尝试过:
template<size_t S>
Foo<S>::Foo() {}
失败了
错误 C3860:类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数
错误 C2976: 'Foo
>' : 模板参数太少
和
template<size_t S, int i>
Foo<S, i>::Foo() {}
失败了
错误 C3860:类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数
错误 C3855: 'Foo
>' : 模板参数 '__formal' 与声明不兼容
我也尝试将模板声明更改为
template <size_t S, typename = std::enable_if_t<(S > 0)>>
这也失败了,第一条错误消息。
这样做的正确方法是什么?
【问题讨论】:
标签: c++ templates c++14 sfinae enable-if