pimpl イディオムを使用する場合、すべてのメソッド定義をクラス定義内に配置することをお勧めしますか? 例えば:
// in A.h
class A {
class impl;
boost::scoped_ptr<impl> pimpl;
public:
A();
int foo();
}
// in A.cpp
class A::impl {
// method defined in class
int foo() {
return 42;
}
// as opposed to only declaring the method, and defining elsewhere:
float bar();
};
A::A() : pimpl(new impl) { }
int A::foo() {
return pimpl->foo();
}
私の知る限り、クラス定義内にメソッド定義を配置することに関する唯一の問題は、(1) クラス定義を含むファイルで実装が表示されることと、(2) コンパイラがメソッドをインライン化する可能性があることです。
この場合、クラスはプライベート ファイルで定義されているため、これらは問題ではありません。また、メソッドは 1 か所でしか呼び出されないため、インライン化は効果がありません。
クラス内に定義を配置する利点は、メソッド シグネチャを繰り返す必要がないことです。
それで、これでいいですか?他に注意すべき問題はありますか?