2016-09-22 7 views
1

これは私のコードのようです。少し簡略化されています。私がしようとしているのは、プロパティクラスのコンストラクタで引数が不要なことです。つまり、引数なしのコンストラクタを呼び出しても、コンストラクタ本体の一部としてそれらを追加することなく、クラスitem変数に構造体value1アイテム変数を設定することができます。クラスの型である構造体の値の取得

#include <iostream> 

using namespace std; 

struct value1 
{ 
    const int item; 
    value1(int n) : item(n) { } 
}; 

struct value2 : public value1 
{ 
    value2() : value1(55) { }; 
}; 

template <class T> 
class property 
{ 
public: 
    property(T stuff); 
    void print(); 
private: 
    int item; 
}; 

template <class T> 
property<T>::property(T stuff) : item(stuff.item) { } 

template <class T> 
void property<T>::print() 
{ 
    cout << item << endl; 
} 

int main() 
{ 
    property<value2> *y = new property<value2>(value2()); 

    y->print(); 

    return 0; 
} 
+0

このように、オブジェクトのメンバーを初期化するデフォルトのコンストラクタを設定したいだけですか? –

+0

はい、コンストラクタのボディにオブジェクトを初期化せずに –

+0

私はあなたが何を求めているのか分かりません。コンストラクタを使用して、オブジェクトのインスタンスを作成します。コンストラクタの本体でオブジェクトを初期化しません。そこにあるオブジェクトのメンバーを初期化します。 –

答えて

1
まだ

コール引数なしのコンストラクタおよびコンストラクタ本体

の一部としてそれらを追加することなく、構造体の値1項目変数を持つクラス項目変数を移入することができるそれは単にあなたのように聞こえますそれは次のように

template <class T> 
class property { 
public: 
    property(); 
    void print(); 

    static property<T> create(T stuff) { 
     property<T> p; 
     p.item = stuff.item; 
     return p; 
    } 

private: 
    int item; 
}; 

あなたはそれを呼び出すことができます:

ファクトリメソッドをしたいです
auto p = property<value2>::create(value2()); 

私が確信が持てなくても、あなたの必要条件が正確にわかりました。
私に知らせてください。質問を理解できない場合は、回答を削除します。

0

機能オブジェクトを使用して達成できます。 以下のコードを見つけてください:

struct value1 
{ 
    const int item; 
    value1(int n) : item(n) { } 
}; 

struct value2 : public value1 
{ 
    value2() : value1(55) { }; 
}; 

template <class T> 
class property 
{ 
public: 
    property(); 
    void operator() (T i) 
    { 
     item = i.item; 
    } 
    void print(); 
private: 
    int item; 
}; 

template <class T> 
property<T>::property() { } 

template <class T> 
void property<T>::print() 
{ 
    cout << item << endl; 
} 

int main() 
{ 
    property<value2> *y = new property<value2>(); 
    (*y)(value2()); 
    y->print(); 
    return 0; 
} 
関連する問題