【发布时间】:2012-04-30 23:35:57
【问题描述】:
假设我有一个接口
class I{
public:
virtual void f(int id)=0;
virtual void g(int id, float x)=0;
}
我需要一个代理类,做某种 id 到指针的映射
class Proxy : I
{
I * i[5];
public:
void f(int id)
{
i[id]->f(id);
}
void g(int id, float x)
{
i[id]->g(id, x);
}
}
所以当我写的时候
Proxy *p;
p->f(1);
在 id=1 的对象上调用 f
这样的案例很多,接口比较大。 所以我不想编写代理类中的所有函数。 有没有办法自动完成?可能使用宏、模板、重载“->”等。
【问题讨论】:
-
您是否为许多接口编写了相同的代理,或者为同一接口编写了许多代理类,或者为许多接口编写了许多代理?
-
这有点令人困惑:看起来像这样,我的实例不知道他自己的索引,但它知道什么时候调用了他的 f 或 g 方法......为什么?奇怪的设计。我会在不知道他自己的索引的情况下计划整个事情。那会更有意义。
-
@hansmaad,许多接口的许多代理(一对一)
-
我不认为有一个干净的解决方案。我最好的想法是区分 I 类的行为,因此如果它的一个对象是使用某个标志创建的,它宁愿充当自身其他实例的代理。您必须在每个成员函数的开头放置一些代码,以检查当前实例是否为代理,如果是,则在请求的实例上调用相同的方法。这可以通过宏来完成。
-
p->get(i)->f()有什么问题?
标签: c++ templates design-patterns macros proxy-classes