我想做这样的事情:
class A{
public:
A(int i);
static A* createWithSpecialCalculation(int a, int b, int c){
// ...complex calculation here...
return new A(result_of_calculation);
}
};
class B:A{
public:
float m_additionalMember;
};
现在我希望能够致电
B* myB = B::createWithSpecialCalculation(1,2,3);
这有可能吗? 如果是这样,怎么样?
答案 0 :(得分:1)
怎么样:
只需稍微改变A中createWithSpecialCalculation
的定义。
template<typename T>
static T* createWithSpecialCalculation(int a, int b, int c){
// ...complex calculation here...
return new T(result_of_calculation);
}
然后你可以去:
B* myB = A::createWithSpecialCalculation<B>(1,2,3);
答案 1 :(得分:0)
这里的继承可能不合适。
相反,请考虑一个免费的模板函数:
template <typename T>
T* createOne(int a, int b, int c) {
int x = complexCalculation(a,b,c);
return new T(x);
}
也就是说,无论类型A
还是B
,构造函数的参数都是相同的;从你希望避免任何代码重复,这听起来像是已经有用的了。
A* myA = createOne<A>(1,2,3);
B* myB = createOne<B>(1,2,3);
考虑shared_ptr<>
而不是这些原始指针。