gpt4 book ai didi

c++ - 如何使用默认模板参数分离模板类的声明和实现?

转载 作者:太空狗 更新时间:2023-10-29 20:34:38 24 4
gpt4 key购买 nike

我喜欢将类的声明和实现分开。我知道类模板和函数的实现也必须进入头文件,这不是问题。

我在实现这个类时遇到了问题:

template <size_t S, std::enable_if_t<(S > 0), int> = 0>
class Foo {
public:
Foo();
}

到目前为止我已经尝试过:

template<size_t S>
Foo<S>::Foo() {}

失败了

error C3860: template argument list following class template name must list parameters in the order used in template parameter list

error C2976: 'Foo<S,<__formal>>' : too few template arguments

template<size_t S, int i>
Foo<S, i>::Foo() {}

失败了

error C3860: template argument list following class template name must list parameters in the order used in template parameter list

error C3855: 'Foo<S,<unnamed-symbol>>' : template parameter '__formal' is incompatible with the declaration

我也试过将模板声明更改为

template <size_t S, typename = std::enable_if_t<(S > 0)>>

它也因第一条错误消息而失败。

正确的做法是什么?

最佳答案

您不能部分特化模板函数(这是您在第一个片段中所做的)。如果您询问如何在类外定义它,请尝试以下操作:

template <size_t S, std::enable_if_t<(S > 0), int> j>
Foo<S, j>::Foo(){}

你不能只替换 std::enable_if_t<(S > 0), int>通过 int ,因为定义不等价(enable_if 一个 SFINAE 出自 S == 0 案例)。

Live snippet

关于c++ - 如何使用默认模板参数分离模板类的声明和实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47336475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com