【发布时间】:2014-07-23 16:19:58
【问题描述】:
我想知道是否可以自动将方法调用转发到嵌入对象,无需继承。例如:
class embed
{
public:
void embed_method() {return};
};
class container
{
public:
void container_method() {return;}
private:
embed obj;
};
int main()
{
container object;
object.container_method(); // Local method call
object.embed_method(); // 'Forward' call, obviously doesn't work
}
当不可能/不推荐从基类继承时,它可能非常有用。
目前,我唯一的选择是将embed 类方法手动重写为container 类,然后从container 调用embed 方法。即使这个过程可以编写脚本,它仍然很烦人,而且似乎是一个糟糕的解决方案。
【问题讨论】:
-
您可以让
container表现得像一个智能指针并重载适用的运算符(->、*) -
stackoverflow.com/a/13885092/1147772 可能会有所帮助。私有继承也没有问题吗?
-
@Drax 是的,也没有问题。
-
@DieterLücking 我会看一下,但我看不出智能指针在这种情况下如何帮助我。问题是
embed方法仍然没有在更高级别的类中定义(sp 和container都没有)。 -
我认为你应该重新考虑你的设计。为什么要公开嵌入对象方法?也许你觉得需要调用嵌入对象方法的代码应该是容器对象的方法的一部分(例如告诉,不要问)?
标签: c++