私のインタフェースのいくつかのメソッドを非推奨にしたいとします。 下位互換性のために、しばらく前のメソッドをサポートする必要があります。インタフェースの[[廃止予定]]メソッドを実装できません
// my own interface for other
interface I {
[[deprecated("use 'bar' instead")]]
virtual void foo() = 0;
};
しかしのVisual Studio 2015は、私は、このインターフェイスを実装することはできません。
// my own implementation
class IImpl : public I {
public:
virtual void foo() override; // here goes warning C4996:
// 'I::foo': was declared deprecated
};
私は(/ WX)エラーとしてオプションにトリートWaningsを使用をので、このコードはできませんコンパイルされる。
私はローカルに警告を無視しよう:
class IImpl : public I {
public:
#pragma warning(push)
#pragma warning(disable: 4996)
virtual void foo() override;
#pragma warning(pop)
// ... other methods are outside
};
をしかし、それは効果がありません。
#pragma warning(push)
#pragma warning(disable: 4996)
class IImpl : public I {
public:
virtual void foo() override;
// ... other methods are also affected
};
#pragma warning(pop)
GCCは、物事を右にするようだ:
#pragma GCC diagnostic error "-Wdeprecated-declarations"
interface I {
[[deprecated]]
virtual void foo() = 0;
};
class IImpl : public I {
public:
virtual void foo() override; // <<----- No problem here
};
int main()
{
std::shared_ptr<I> i(std::make_shared<IImpl>());
i->foo(); // <<---ERROR: 'virtual void I::foo()' is deprecated [-Werror=deprecated-declarations]
return 0;
}
それはMSVC++のバグのあるコードをコンパイルすることを可能にする唯一の解決策は、全体のクラス宣言の警告を無視しているのですか? Visual Studioでの非推奨の宣言を正しく使用する方法はありますか?
して、警告を無効にします。
このように回避することができますか? – nwp
http://stackoverflow.com/a/295229/612920 – Mansuro
@nwpこの宣言は、自分のインターフェイスのユーザー向けです。私はインターフェイスのプロバイダです。 –