Maya 2018 以降では、OPENMAYA_DEPRECATED C++ アトリビュートを使用して非推奨のメソッドをマークする必要があります。例:
OPENMAYA_DEPRECATED(version, "message")
マークされたメソッドが呼び出されると、コンパイラに関する警告がマーキング システムによって生成されます。これにより、都合のいいときにプラグインから非推奨メソッドを除去することができます。このような警告の例:
警告 C4996: 'MPxTransform::validateAndSetValue': 代わりに validateAndSetValue(const MPlug&, const MDataHandle&) をオーバーライドしてください。 必要に応じて、MDGContext::current() を使用してコンテキストを取得してください。
コンパイラで警告をエラーとして扱う(treat warning as error)が有効になっていて、移行中に関連する構築エラーが発生した場合は、非推奨の警告を無効にすることができます。
非推奨の警告を非表示にするには、次の操作を実行します。
MSVC | /Wd"4996" |
ICC | -diag-disable 1786 |
Clang | -Wno-error=deprecated-declarations |
GCC | -Wno-error=deprecated-declarations |
非推奨をエラーとして扱うには、次の操作を実行します。
MSVC | /We"4996" (/D_CRT_NONSTDC_NO_DEPRECATE) |
ICC | -diag-error 1786 |
Clang | -Werror=deprecated-declarations |
GCC | -Werror=deprecated-declarations |
次の例では、getMatrix() と getMatrix(const MDGContext&) の両方に対する関数の呼び出しが既定で有効になります(オーバーライドされたメソッドからの API 呼び出しは除く)。詳細については、以下の「非推奨メソッドをオーバーライドする」を参照してください。
class MPxTransform { public: virtual MMatrix getMatrix(); // New api, default to redirect the call to the old method obsolete_2018: OPENMAYA_DEPRECATED(2018, "Call getMatrix(MStatus*) instead.”) virtual MMatrix getMatrix(const MDGContext&); }
新しい API と非推奨の API をオーバーライドする場合は、いずれかをオーバーライドすることができますが、両方をオーバーライドすることはできません。新しい API のオーバーライドから非推奨の API を呼び出さないでください(逆も同様)。
以下の例を参照してください。
class UserTransform : public MPxTransform { MMatrix getMatrix() override; };
class UserTransform: public MPxTransform { MMatrix getMatrix(const MDGContext&) override; // deprecated };
class UserTransform: public MPxTransform { MMatrix getMatrix() override; // new MMatrix getMatrix(const MDGContext&) override; // deprecated }; // Error, override both API in one class class UserTransformBase: public MPxTransform { MMatrix getMatrix(const MDGContext&) override; // deprecated }; // Ok class UserTransformDerived: public UserTransformBase { MMatrix getMatrix() override; // new }; // Error, override both API in one inheritance hierarchy
class UserTransform: public MPxTransform { MMatrix getMatrix() override { return MPxTransform::getMatrix(); // OK //return MPxTransform::getMatrix(MDGContext::current()); // Error, calling deprecated API from new API overridden } };