有两个类:
class A {
public:
virtual void foo( int bar );
}
class B {
virtual void foo( string bar, int baz);
}
现在,我正在构建的类可以派生自任一类。但是有一些常见的帮助代码,所以我想把它分解成一个基类。必须调用此公共代码,并且应采用与相应方法foo
相同的参数。foo
所以我声明了这个模板类,但不知道是否可以foo
从模板参数中“提取”的签名(这是一个基类 - 要么 要么A
)B
:
template<class Base>
class CommonBase : public Base {
public:
// how do I overload Base::foo here?
void foo(/*Base::foo arguments here*/) {
commonCode(/*Base::foo arguments here*/);
}
protected:
// how do I define commonCode with Base::foo signature below?
void commonCode(/*Base::foo arguments here*/) { ... }
}
我对 C++ 模板没有什么经验,所以想知道——这有可能吗?我看到的一种解决方案是为方法签名添加另一个模板参数,并在专门化时显式传递它。但是感觉是多余的,因为foo
签名的知识已经包含在类参数中(如果根本不提供,Base
编译应该会失败)。Base
foo