我有以下一段代码。 让我们有函数声明和实现 分开。
#include <iostream>
class Y1 {};
class Y2 {};
template <class T1, class T2>
class A
{
public:
explicit A();
void foo() const;
int bar() const;
};
template <class T1, class T2>
A<T1, T2>::A() {}
template <class T1, class T2>
void A<T1, T2>::foo() const {}
template <class T1, class T2>
int A<T1, T2>::bar() const {}
int main() {
A<Y1, Y2> a;
a.foo();
A<Y1, Y2> *a2 = new A<Y1, Y2>();
a2->foo();
return 0;
}
每次写字都很痛苦
template <class T1, class T2>
对于每个对象声明和函数声明。
有人可以用宏或 typedef 来帮助缩短 模板参数说明。
最佳答案
首先,最好在类定义本身实现功能。然后,您的问题就会完全消失。
如果您必须在外部实现函数,您可以使用类似于下面的宏来实现简单的返回类型。
#define A_FUNC(ret, name) \
template <class T1, class T2> \
ret A<T1, T2>::name
A_FUNC(void, foo)() const {}
A_FUNC(int, bar)() const { return 0;}
但是,对于复杂的返回类型,该逻辑将崩溃。假设你有:
template <class T1, class T2>
class A
{
public:
explicit A() {}
void foo() const;
int bar() const;
char const* (*)(int, int) bar2() const;
};
我不知道是否有办法将该返回类型捕获为宏参数。
使用
A_FUNC((char const* (*)(int, int)), bar2)() const { return NULL;}
导致各种编译器错误。
关于c++ - 使用 typedef 将多个模板类合并为一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30875683/