2012-12-12 58 views
46

給定一個模板類,如下所示:如何轉發聲明一個C++模板類?

template<typename Type, typename IDType=typename Type::IDType> 
class Mappings 
{ 
public: 
    ... 
    Type valueFor(const IDType& id) { // return value } 
    ... 
}; 

一個人怎麼能向前在頭文件中聲明這個類?

+12

不知道爲什麼這是封閉的 - 鏈接的問題是相似的,但不同。那一個涉及在'std'命名空間中向前聲明模板。這個問題更一般,並有一個不同的最高評分答案。我已投票重新開放。 –

回答

65

這是你會怎麼做:

template<typename Type, typename IDType=typename Type::IDType> 
class Mappings; 

template<typename Type, typename IDType> 
class Mappings 
{ 
public: 
    ... 
    Type valueFor(const IDType& id) { // return value } 
    ... 
}; 

注意,默認是向前聲明,而不是實際的定義。

6

您只能爲模板的第一個聲明聲明模板的默認參數。如果你想允許用戶轉發聲明一個類模板,你應該提供一個轉發頭。如果您想使用默認值轉發聲明其他人的班級模板,那麼您運氣不好!