使用宏。这就是我总是这样做的,因为它很简单,易于维护。
采取这样的情况:
template <typename A, size_t B, int C, pointer_to_some_func D> class tTemplate
{
struct myStruct
{
int i, j;
};
void function1 (tTemplate <A, B, C, D> :: myStruct S);
void function2();
};
template <typename A, size_t B, int C, pointer_to_some_func D> void tTemplate <A, B, C, D> :: function1 (tTemplate <A, B, C, D> :: myStruct S)
{
}
等等
试想一下,如果我不得不改变一个参数或添加一个又一个......
现在有了这个:
#define dTemplate tTemplate <A, B, C, D>
#define sTemplate template <typename A, size_t B, int C, pointer_to_some_func D>
sTemplate void dTemplate :: function1 (dTemplate::myStruct S)
{
}
更容易维护,可用于其他类\模板等。一个模板参数change =一个宏c适用于任何地方的危险。而且它的眼睛也更好。 另外,我发现它在模板中是一件好事,特别是因为typedef是不行的。 关于宏的最好的事情,即使是IF typedefs是一个标准:你不需要向前声明......永远! (是的,宏是邪恶的,但在这样的情况下theese,他们比有用的多)
至于你的例子:
#define dC1 C1 <T> // no ";" !!!
template <typename T> class C1
{
T t;
};
template <typename T> class C2
{
dC1 c1;
};
发布一些代码......这两个类的定义,和typedef。 – Nawaz
您是否尝试在课堂或课堂外敲入它? –
它究竟如何“不起作用”?你有编译器错误吗?如果是这样,它说什么? –