2017-12-25 8 views
0

次のプログラムにコードが重複しています。 fooクラスからusing VectorPtr = std::vector<T>*を移動する必要があります。 getValメソッドからリターンポインタとしてプライベートptrを使用する必要があります。クラスからエイリアスを移動するにはどうすればよいですか?重複するtypedefの削除

あなたが using

template<class T> 
using VectorPtr = std::vector<T>*; 

template<ENUM e, class T> struct foo { 
public: 
    static VectorPtr<T> getVal() { return ptr; } 
private: 
    static VectorPtr<T> ptr; 
}; 

それとも(同じテンプレートusingを使用して)をテンプレートに必要

enum ENUM 
{ 
    E1, 
    E2 
}; 

template<ENUM e, class T> struct foo; 
template<class T> 
class foo<ENUM::E1, T> 
{ 
public: 
    using VectorPtr = std::vector<T>*; 
    static VectorPtr getVal() { return ptr; } 
private:  
    static VectorPtr ptr; 
}; 

template<class T> 
class foo<ENUM::E2, T> 
{ 
public: 
    using VectorPtr = std::vector<T>*; 
    static VectorPtr getVal() { return ptr; } 
private: 
    static VectorPtr ptr; 
}; 
+11

ポインタが悪いとしてちょうどそれを使用して維持するためにポインタ型をエイリアシング悪い悪い。 C++では、 'Ptr'は' * 'と書かれています。それに慣れるほうがいい。 – StoryTeller

+3

「エイリアスをクラスから移動する」を定義します。エイリアスをグローバルに宣言したい場合は、それを実行してください。 'テンプレート VectorPtr = std :: vector *'を使用し、両方のクラスから 'VectorPtr 'と簡単に参照してください。 –

+0

あなたのコードを確認するのにhttps://codereview.stackexchange.com/を使用してください – HDJEMAI

答えて

1

template<ENUM e, class T> struct foo; 
template<class T> 
class foo<ENUM::E1, T> { 
public: 
    static VectorPtr<T> getVal() { return ptr; } 
private: 
    static VectorPtr<T> ptr; 
}; 

template<class T> 
class foo<ENUM::E2, T> { 
public: 
    static VectorPtr<T> getVal() { return ptr; } 
private: 
    static VectorPtr<T> ptr; 
}; 
+0

=]] Boに感謝します。ptrをどのように共有するかを教えてもらえますか?そしてそれはすべてのfooと共有されます。同時に、そのタイプを ' T? –