【发布时间】:2014-08-07 08:34:24
【问题描述】:
知道这可能是一个不恰当的问题(因为回复可能(将)仅基于个人的主观意见),我仍然冒险提出这个问题:
我们编写了一些代码并提出了以下构造
#include <iostream>
#include <string>
class Generic
{
public: virtual void do_work() = 0;
};
class SomeAppDescriptor : public Generic
{
public: static std::string name() { return "SomeAppDescriptor"; }
};
template <class TGenericApp>
class CommonFunctionalities : public TGenericApp
{
public: void do_common_work() {
std::cout << "do_common_work for " << TGenericApp::name();
}
};
class RealClass : public CommonFunctionalities<SomeAppDescriptor>
{
public: virtual void do_work() {
do_common_work();
std::cout << "and doing the work" << std::endl;
}
};
int main(int argc, char const *argv[])
{
RealClass a;
a.do_work();
return 0;
}
现在我们处于文档阶段...我们需要为结构命名,其中CommonFunctionalities 继承自模板成员...并使用SomeAppDescriptor 的属性,这实际上是模板成员...如果要命名此构造,它的合适名称是什么?
编辑
主要思想是有很多AppDescriptor类从配置文件中读取一些数据(名称、ip、数据库等...),还有一个中间层(这里用@表示987654328@ 完成工作(但在某些模糊点,CommonFunctionalities 对象被映射到name()(字符串和通用映射)以获得do_work() 的功能),最后有人来自某处正在调用Generic 的do_work,它在一组“上”层类(RealClass)中实现
【问题讨论】:
-
你想用这个模式实现什么?我不能完全理解它背后的基本思想。
-
我会说那是一个混合 - 不是吗?见 Dobbs 博士:drdobbs.com/cpp/mixin-based-programming-in-c/184404445
-
CommonFunctionalities使用CRTP -
在我看来这被称为“垫片”? drdobbs.com/shim-classes/184401200?pgno=2
-
@MatthiasB:这里甚至没有必要,您可以让
RealClass继承自Generic并将CommonFunc...作为属性。
标签: c++ design-patterns