2017-11-16 5 views
0

現在、引数を取らないコンストラクタを持つテンプレートクラスがあります。問題は、テンプレートで使用されているクラスに、コンパイルエラーを返す空のコンストラクタがないことがあることです。私はおそらくTへのREFを取る第二のコンストラクタを追加し、その後、Tはデフォルトコンストラクタを持っていない場合、パラメータなしのコンストラクタを削除するenable_if使用して使用するのではと思ってきましたが、私はもしわからないデフォルトコンストラクタを持たないテンプレートのコンストラクタ

template <typename T> 
class A 
{ 
    public: 
    T Thing; 
    int number; 
    A():number(5) {} 
}; 


    class B 
    { 
     public: 
     int a; 
     B(int _a):a(_a) {} 
    } 

    A<int> a1; // This is fine 
    A<B> a2; // This is not fine since B has no default constructor 

それはうまくいくでしょう。他のオプションはありますか?

私は、Bのインスタンスを不明な状態にしたくないので、クラスBにデフォルトのコンストラクタを追加したくないことに注意してください。

+0

"うまくいくかどうかわからない"場合は、試してみてください。 – Jesin

+0

あなたはどのような問題を解決しようとしていますか?これはX、Yの問題のようです。 –

+0

私はenable_ifがどのように見えるかわからないので、試してみました。 – bpeikes

答えて

0

いくつかの人に話をして、より多くの研究を行い、解決策を見つけました。 constexpr静的メンバーによってテンプレート化されたデフォルトコンストラクタを作成する。 ここにあります:

関連する問題