我有一个关于在 C++ 中实现接口的问题:
假设有一个接口:
class A
{
virtual void f() = 0;
};
在实现这一点时,我想知道是否有办法做类似的事情:
class B : public A {
void f(int arg=0) {....} // unfortunately it does not implement f() this way
};
我想保持 iterface 干净。当客户端代码通过公共接口 A 调用时,arg 总是自动设置为 0。但是,当我通过 B 调用它时,我可以灵活地调用它,并将 arg 设置为一些不同的值。它可以实现吗?
编辑:由于我控制接口和实现,我愿意接受任何建议、宏、模板、仿函数或任何其他有意义的东西。我只想拥有一个最小且干净的代码库。这个类很大,我不想编写任何非绝对必要的代码——例如,另一个简单地转发到实际实现的函数。
EDIT2:只是想澄清一下:公共接口提供给客户端。它比仅在内部使用的 B 类接口更具限制性。然而,函数 f() 基本上做同样的事情,除了基于输入 arg 的细微不同处理。真实类的接口函数比较多,签名比较复杂。快速进行函数转发会导致繁琐的代码重复,并且会污染 B 的内部接口。我想知道在 C++ 中处理这个问题的最佳方法是什么。
谢谢!