2013-11-28 7 views
0
中定義的類型

定義某些複雜類中聲明的變量類型的最方便和最清晰的方法是什麼?例如:使用類

template<class T1, class T2> 
class ClassA 
{ 
    enum ENUM_A { A1, A2 }; 
    //constructor 
    ClassA(const ENUM_A& x); 
} 

然後,當你想在其他地方使用這個對象,你必須寫長長的類型定義,如:

ClassA<ClassT1, ClassT2>::ENUM_A var = ClassA<ClassT1, ClassT2>::A1; 
ClassA<ClassT1, ClassT2> obj(var); 

是否有任何安全和方便的方式來避免這種長聲明? (我想過typedef,但也許它)

+1

'auto var = ClassA :: A1;'? – juanchopanza

+0

可能與Boost中的['graph_traits'](http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/graph_traits.html)類似。 – gongzhitaao

+0

如果嵌套類型被大量使用,爲什麼不把它提升到頂層? –

回答

1

的解決方案已經被命名爲:typedef(或using),並auto跳過完全命名的類型。

+0

'auto'是一個不錯的解決方案。據我所知,在'enum'元素前面沒有類似的方法來避免'ClassA ::'?例如,當相同的元素(比如'A1')用於'ClassA'的許多模板類型? –

+0

@ user2028058:如果它不依賴於,那麼,是的,我認爲是時候把這個'enum'拿出來。將範圍級別或抽象基類加入。 –