Maya 2018 以降では、OPENMAYA_DEPRECATED アトリビュートを使用して非推奨のメソッドをマークする必要があります。たとえば、次のようになります。
OPENMAYA_DEPRECATED(version, "message")
マークされたメソッドが呼び出されると、コンパイラに関する警告がマーキング システムによって生成されます。これにより、都合のいいときにプラグインから非推奨メソッドを除去することができます。このような警告の例:
warning C4996: 'MPxTransform::validateAndSetValue': Override validateAndSetValue(const MPlug&, const MDataHandle&) instead. If needed, useMDGContext::current() to get the context.
コンパイラで 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
```
新しい API のオーバーライドから非推奨 API を呼び出さないでください(または非推奨 API のオーバーライドから新しい API を呼び出さないでください)。
```
class UserTransform: public MPxTransform {
MMatrix getMatrix() override {
return MPxTransform::getMatrix(); // OK
//return MPxTransform::getMatrix(MDGContext::current()); // Error, calling deprecated API from new API overridden
}
};
```