根据C++标准,当使用默认模板参数向前声明模板类型时,它们中的每一个都只能出现在一个声明中.例如:
// GOOD example
template <class T = void>
class Example; // forward-declaration
template <class T>
class Example {}; // definition
Run Code Online (Sandbox Code Playgroud)
// GOOD example
template <class T>
class Example; // forward-declaration
template <class T = void>
class Example {}; // definition
Run Code Online (Sandbox Code Playgroud)
// BAD example
template <class T = void>
class Example; // forward-declaration
template <class T = void> // ERROR: template parameter redefines default argument
class Example {}; // definition
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我在不同的文件中有很多前向声明,所以将默认参数放在定义中是有意义的:
// foo.hpp, bar.hpp, baz.hpp, etc. …Run Code Online (Sandbox Code Playgroud)