2017-04-03 2 views
1

。一つはdefault_SSとは異なる名前を持つように、一貫性が邪魔に壊れているのtypedefC++のデフォルトのテンプレートクラス/構造体とは避けてください。<>

typedef S<int> defaut_S; 
default_S(1); 

が、ここのために達する可能性がある、とユーザーとの混同を引き起こす可能性があります。メンバ関数では機能しないことは言うまでもありません。

これを実行するより良い方法はありますか?

+0

あなたが何を求めているのか分からない。明らかに 'default_S'は' S'とは違う名前なので、なぜその事実が混乱を引き起こすのかは分かりません。メンバ関数にも問題はありません。 –

+1

C++ 17では、コンストラクタからクラステンプレートパラメータを推論できます。 – chris

+0

私は、上記のアプローチは混乱につながる可能性があると考えました。なぜなら、私たちは同じクラスを持っているからです。概念的には両方の名前で同じです。多分彼らは別のクラスから来ていると思っている人でしょう。あるいは、別のクラスとして扱われることを望むので、これが好まれますか?いいえ、メンバー機能に問題はありません。私は間違っていました。 – LeastSquaresWonderer

答えて

1

インスタンシエーター機能パターンを使用します。

template <class T> 
struct S 
{ 
    T x; 
    void a(T xx) { x = xx; } 
}; 

template <class T=int> 
S<T> make_s() { return S<T>(); } 

int main() 
{ 
    auto s = make_s(); 
    auto t = make_s<double>(); 
} 
関連する問題