在下面的設置中,我怎樣才能使它可以在派生類Derived<T>
內引用名稱Bar
?如何命名模板化基類中的嵌套模板?
template <typename T> struct Foo
{
template <typename U> struct Bar { };
};
template <typename T> struct Derived : Foo<T>
{
// what goes here?
Bar<int> x; // Error: 'Bar' does not name a type
};
我試過using Foo<T>::Bar;
,但這並沒有幫助。是否有任何種類的using
聲明可以使派生類已知的嵌套基模板的名稱,以便我可以保持簡單的 配給Bar<int> x
?
我知道我可以說typename Foo<T>::template Bar<int> x;
,但我有很多這樣的情況,我不想不必要的冗長冗長的代碼。我也有很多不同的「int
s」,因此每個嵌套模板實例的typedef
也不可行。
此外,我不能在此時使用GCC 4.7,也不會使用C++ 11,因此會喜歡沒有模板別名的「傳統」解決方案。
是的,的確如此。不幸的是,我沒有對這種編譯器的實際訪問權限,所以如果可能,我想要一個「傳統」解決方案:-S –
@KerrekSB:什麼是「非傳統」的? – Nawaz
@Nawaz:我不能在我需要這個項目的地方使用它:-) –