私の実装ファイル (.cc ファイル) では、クラス定義 (Pimpl クラスの関数など) でメンバー関数を定義すると便利であることがよくあります。例えば:
struct X::Impl {
void DoSomething() {
...
}
};
それ以外の
struct X::Impl {
void DoSomething();
};
void X::Impl::DoSomething() {
...
}
これは、いくつかの理由から、クラス定義の外で関数を実装するよりも望ましいと思います。可読性を高め、メソッドを小さく保つ練習を容易にします (メソッドを簡単に追加できるようにすることで)。メソッド宣言を更新する必要がないため、コードの保守も簡単です。
唯一の欠点は、クラス宣言で定義されたメソッドが暗黙的にインライン化されることです。これは、オブジェクト コードのサイズが大きくなるため、通常は望ましくありません。
私の質問は次のとおりです。
私はこれの権利を持っていますか?私が見逃しているこのプラクティスの他の欠点はありますか?
暗黙のインライン展開は心配する必要がありますか? コンパイラは、インライン化されるべきではないメソッドをインライン化するという暗黙の要求を拒否するほどスマートですか?
クラス定義で定義されたメソッドがインライン化されていないと宣言することは可能ですか?