Putting all methods in class definition

Posted by Amnon on Stack Overflow See other posts from Stack Overflow or by Amnon
Published on 2010-12-23T09:32:02Z Indexed on 2010/12/23 9:54 UTC
Read the original article Hit count: 201

Filed under:
|
|

When I use the pimpl idiom, is it a good idea to put all the methods definitions inside the class definition? For example:

// 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();
}

As far as I know, the only problems with putting a method definition inside a class definition is that (1) the implementation is visible in files that include the class definition, and (2) the compiler may make the method inline.

These are not problems in this case since the class is defined in a private file, and inlining has no effect since the methods are called in only one place.

The advantage of putting the definition inside the class is that you don't have to repeat the method signature.

So, is this OK? Are there any other issues to be aware of?

© Stack Overflow or respective owner

Related posts about c++

Related posts about inline