我们正在试图命名空间我们与命名空间API的版本继承问题,虽然我们计算过,我们会得到一些问题,虚函数:C++使用的版本命名空间可能会导致覆盖
namespace v1 {
class someParam {
public:
someParam() {};
virtual ~someParam() {};
};
class someClass {
public:
someClass() {};
virtual ~someClass() {};
virtual bool doSomething(someParam a);
};
bool someClass::doSomething(someParam a)
{
return true;
}
}
namespace v2 {
class someParam : public v1::someParam {
public:
bool doParamStuff();
};
bool someParam::doParamStuff()
{
return true;
}
}
// Type Aliasing for v2 API
using someClass = v1::someClass;
using someParam = v2::someParam;
// SOME OTHER PROGRAM
class plugin : public someClass
{
public:
plugin() {};
virtual ~plugin() {};
bool doSomething(someParam a) override;
};
在这在特定情况下,我们正在创建现有类的扩展以实现二进制兼容性。虽然,由于override关键字,我们得到了plugin :: doSomething的编译错误,因为它不覆盖someClass :: doSomething,因为:
plugin :: doSomething(v2 :: someParam)vs someClass :: doSomething(v1 :: someParam)。
有没有什么办法可以修正插件而不明确地在插件类中使用v1 for someParam?理想的情况下,没有什么应该在插件方面来完成,而无需创建V2 :: SomeClass的