オーバーライドではなく、仮想メソッドを非表示にしたいと考えています。歴史的/互換性の理由から、オーバーライド指定子はオプションであり、オーバーライドは暗黙的に行われることを知っています。上書きをやめるために、私は通常、デフォルトの「ダミー」パラメーターを追加して署名を調整しました。より良い方法はありますか?
次のコードを想定します。
#include <iostream>
class A{
public:
virtual void Foo()
{
std::cout << "A::Foo";
}
};
class B : public A
{
public:
void Foo() /*not override, just hide*/
{
std::cout << "B::Foo";
}
};
int main()
{
B b{};
A& a = b;
a.Foo(); //should print A::Foo - but prints B::Foo
}
これまでに行ったことは次のとおりです。
#include <iostream>
class A{
public:
virtual void Foo()
{
std::cout << "A::Foo";
}
};
template<typename T>
class reintroduce{};
class B : public A
{
public:
void Foo(reintroduce<B> = {}) /*not override, just hide*/
{
std::cout << "B::Foo";
}
};
int main()
{
B b{};
A& a = b;
a.Foo(); //should print A::Foo
}