在下面的代碼片斷:指依賴類型名
#include <map>
template<class T>
struct Base {
typedef T U;
};
template<class T>
struct Derived: public Base<std::map<int,std::map<int,T>>> {
typedef typename Base<std::map<int,std::map<int,T>>>::U U; // ugly!
void F(U u) {};
};
int main(){}
標記行是難看,並且還包含重複的信息(如果基類參數的變化的類型,這條線也必須被改變)。但是有必要重複這樣的聲明,否則代碼不會編譯。另外,我想避免做一個全局typedef聲明...
有沒有解決方案來引用在模板相關的基類中定義的類型?
問題是,這樣看來,人們可以隨意選擇C的值,而在我的情況下,如果用戶更改C,代碼可能會以一些不可預見的方式破壞。 C是一個實現細節。 –
@EmanuelePaolini也許'typedef std :: map> Map;'在聲明'struct Derived'之前,然後簡單地'Base
@ W.F。這將是一個全局的typedef,其實現細節也是我想避免的。 –