次のコード例を検討してください。
struct Base {
virtual void foo(int) {}
virtual void foo(int, double) {}
};
struct Derived : Base {
virtual void foo(int) {}
};
Embarcadero RAD Studio 2010 (C++Builder 2010) では、(正しい) 警告Base::foo(int,double)
が表示され、 によって隠されていることがわかりDerived::foo(int)
ます。(同じ警告が gcc によってトリガーされ-Woverloaded-virtual
ます) 通常行うことは、 using ディレクティブです。
struct Derived : Base {
virtual void foo(int) {}
using Base::foo;
};
これにより、予想どおり gcc の警告が消えますが、C++Builder では役に立ちませんが、基本クラスの関数がコンパイラから見えるようになります。
Derived d;
d.foo(2,3.4);
using ディレクティブで問題なくコンパイルされます。
#pragma warn
関数を使用または再定義する以外に、C++Builder で警告を取り除く既知の回避策はありますか?
struct Derived : Base {
virtual void foo(int) {}
virtual void foo(int i, doubld d) {Base::foo(i,d); }
};