使用泛型在构建时将功能附加到类
Attaching functionality to a class at build time with genericity
我有一个类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...
};
但是,我可能误解了你的问题。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 链表的泛型函数remove()与成员函数remove)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何编写将要继承的泛型代码?
- C++17 如何保存泛型可调用对象以供以后使用
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- C++泛型类错误,问题出在哪里?
- C++泛型类,单独实现?
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 泛型枚举和其他类型的重载模板函数
- 使用泛型类型推送到堆栈时出现问题
- 可变参数泛型 lambda 和函数重载
- C++ 泛型和多态性:这种模式可行吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- Java 是否像C++模板一样具有泛型推论?
- 为堆栈实现泛型集合
- boost::serialization-序列化从泛型属性/功能容器派生的类
- 使用泛型在构建时将功能附加到类