On Fri, 18 Feb 2011 09:43:19 -0500, Erik Meer <[email protected]> wrote:
Does using interfaces extensively have a performance drawback like using
inheritance has?
Why do I ask? I was thinking about adopting a coding practice where I
define explicit interfaces for all public aspects of my classes, and
then couples the interfaces closely to unit tests. Then, whenever I
would create a new class using some of these interfaces the unit tests
would tag along, which means the unit tests would be reusable.
Now, if the compiler has do align stuff in some arduous way to
accommodate these interfaces then this whole idea might not be worth it?
Or are interfaces a no-cost constraint on the implementation?
There is a real cost associated with interfaces. Each additional
interface on a class requires another pointer-sized word space. I would
recommend not adding interfaces if the sole purpose is to use them for
unit tests.
You can reuse unit tests by creating a template function.
example:
// all classes that define foo conform to the foo definition.
class X
{
int foo() {...}
}
class Y
{
int foo() {...}
}
unittest
{
void testFoo(T)(T t) { assert(t.foo() == 0); }
testFoo(new X);
testFoo(new Y);
}
-Steve