2016-09-22 3 views
1

이것은 내 코드의 모양입니다. 약간 단순화되었습니다. 내가 뭘/궁금해 내가 할 수있는 경우 속성 클래스 생성자에서 인수에 대한 필요성을 제거합니다. 즉 arg가없는 생성자를 호출하고 클래스 항목 변수를 생성자 본문의 일부로 추가하지 않고도 struct 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; 
}