On Tuesday, 9 June 2015 at 14:05:40 UTC, Ola Fosheim Grøstad wrote:
One of the arguments for having separate declarations and definitions in C++ is that it provides better encapsulation (which C++ breaks for templates and inlined methods).

If you have full encapsulation you know that the declaration holds. So "x.print()" means that the declaration for the type of x includes "print()".

Well, if you have full encapsulation, then you don't have extension methods and consequently don't have this issue.

True, but you can always wrap code in interfacing-references. I use this deliberately in multi-threaded code, so that I avoid calling the wrong methods on the wrong thread. E.g. "multithreaded(someobject).clear()" and "singlethreaded(someobject).clear()".

This doesn't look like full encapsulation if the type behavior is extended this way.

Reply via email to