使用泛型在构建时将功能附加到类

Attaching functionality to a class at build time with genericity

本文关键字:功能 泛型 构建      更新时间:2023-10-16

我有一个类a,它是一个外部类,不在我的控制之下,但我可以设计它的规格。

在我的代码中,我想静态地将一些属性和方法附加到A。我可以从A继承并附加新功能。但是,由于我不知道A的确切规格,我无法在派生类internalA中提供A的构造函数。

我可以使用decorator模式,但这似乎有点过头了,因为我想在构建时进行装饰。

有什么建议可以很好地解决它吗?

可能是完美的转发,可变模板将有所帮助:

#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...
};

但是,我可能误解了你的问题。