如何避免为每个成员函数复制类模板规范?

ric*_*rdr 6 c++ templates

如果我有这样的模板类规范,

template <typename T>
class MyClass {
public:
    void fun1();
    // ...
    void funN();
};

template <typename T>
void MyClass<T>::fun1() {
    // definition
}

// ...

template <typename T>
void MyClass<T>::funN() {
    // definition
}
Run Code Online (Sandbox Code Playgroud)

如果我将类模板更改为其他模板,请说我添加了一个额外的参数:

template <typename T, typename U>
class MyClass {
    // ...
};
Run Code Online (Sandbox Code Playgroud)

然后我必须更改每个函数定义(fun1,...,funN)以同意类模板规范:

template <typename T, typename U>
void MyClass<T,U>::fun1() { //... }
Run Code Online (Sandbox Code Playgroud)

有什么策略可以避免这种情况吗?我可以使用宏吗?

#define DFLT_TEMPLATE template<typename T, typename U>
#define DFLT_CLASS  class<T,U>

DFLT_TEMPLATE
void DFLT_CLASS::fun1() { // ... }
Run Code Online (Sandbox Code Playgroud)

或者这被认为是不好的做法?

Cha*_*via 5

对我来说,使用宏的好处远远超过了缺点.是的,如果您使用宏,那么如果您需要添加其他模板参数,则只需进行一次修改即可.但阅读你代码的其他人可能会呕吐.

我的意思是,你打算为你拥有的每个模板做这个吗?你的代码会被丑陋的宏所侵扰.