2011-08-11 38 views
3

原题:我有一个类型template <typename CostType> struct Key我在另一个类UQueue,这也是模板上CostType使用。我不想在此课程中指定Key<CostType>。我试过typedef Key<CostType> Key,这不起作用。是否有另一种解决方法?类型定义默认模板类型相同的名称

编辑:(使用2010 MSVC

template <typename T> 
class C1 { 
    T t; 
}; 
template <typename T> 
class C2 { 
    typedef C1<T> C1; 
    C1 c1; 
}; 

然而,这个工程:将已经表现出了问题(如果出现了一个)的小例子,本来这一点。我的代码中还有一些其他错误让我误以为typedef是非法的。抱歉关于带宽。

+4

发布一些代码......这两个类的定义,和typedef。 – Nawaz

+0

您是否尝试在课堂或课堂外敲入它? –

+2

它究竟如何“不起作用”?你有编译器错误吗?如果是这样,它说什么? –

回答

0

使用宏。这就是我总是这样做的,因为它很简单,易于维护。

采取这样的情况:

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; 
};