我有一个 A 类,它是一个外部类,不受我控制,但我可以设计它的规格。
在我的代码中,我想将一些属性和方法静态附加到 A。我可以从 A 继承并附加新功能。但是,由于我不知道 A 的确切规格,我无法在派生类 internalA 中提供 A 的构造函数。
我可以使用装饰器模式,但这似乎有点矫枉过正,因为我想在构建时进行装饰。
有什么建议可以很好地解决它吗?
我有一个 A 类,它是一个外部类,不受我控制,但我可以设计它的规格。
在我的代码中,我想将一些属性和方法静态附加到 A。我可以从 A 继承并附加新功能。但是,由于我不知道 A 的确切规格,我无法在派生类 internalA 中提供 A 的构造函数。
我可以使用装饰器模式,但这似乎有点矫枉过正,因为我想在构建时进行装饰。
有什么建议可以很好地解决它吗?
可能是完美的转发和可变模板将有助于:
#include <utility>
#include "A.h"
class B: public A
{
public:
template<class... TT>
B(TT&&... tt) :A(std::forward<TT>(tt)...) {}
B(const B&)=default;
B(B&&)=default;
//whatever other decoration
};
如果您更喜欢组合,则该模式的工作方式相同,只是 A 将是成员而不是基础。
我相信对 externalA 的引用就足够了。
template <typename A>
class InternalA {
A &externalA;
int property1;
std::string property2;
//...
public:
InternalA (A &extA, int prop1, std::string prop2 /*...*/);
// accessors to properties and to externalA...
};
但是,我可能误解了你的问题。