这就是我的代码。它有点简化。我试图/想知道我能做什么是消除了属性类构造函数中对参数的需要。即调用no arg构造函数,仍然能够使用struct value1项变量填充classes项变量,而不将它们作为构造函数体的一部分添加。
#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 :(得分:1)
调用no arg构造函数,仍然能够使用struct value1项变量填充classes项变量,而不将它们作为构造函数体的一部分添加
听起来你只想要一个工厂方法:
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());
即使我不确定我是否完全满足您的要求 让我知道,如果我不理解这个问题,我会删除答案。
答案 1 :(得分: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;
}