Когда я использую идиому 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) компилятор может сделать метод встроенным.
В данном случае это не проблемы, поскольку класс определен в закрытом файле, а встраивание не имеет никакого эффекта, поскольку методы вызываются только в одном месте.
Преимущество помещения определения в класс состоит в том, что вам не нужно повторять сигнатуру метода.
Так это нормально? Есть ли другие проблемы, о которых нужно знать?