当我使用 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)编译器可能使方法内联。
在这种情况下,这些都不是问题,因为类是在私有文件中定义的,并且内联没有效果,因为方法只在一个地方被调用。
将定义放在类中的好处是您不必重复方法签名。
那么,这样可以吗?还有其他需要注意的问题吗?