Victor Bazarov
11/18/2008 4:52:00 PM
Tonni Tielens wrote:
> I'm trying to create a pure virtual class describing an interface.
> Normally, when I do this I make the destructor pure virtual so that,
> even if there are no members in the class, it cannot be instantiated.
Why would you have an interface with no other members? Wouldn't it be
pretty much useless as an interface?
> The difference now is that I'm making a generic interface with
> template arguments. Template classes should be defined in the header
> file, but it is not allowed for a destructor's definition to be in the
> class definition if the destructor is pure virtual. Atleast not with
> GCC -pedantic and I understand this is correct behavior. I'm unsure on
> how to solve this. I know I don't really have to put a pure virtual
> destructor in the class, but I think it's good practice so if it's
> possible I would like to stick to this.
>
> My code looks like the following:
>
>
> template <typename TypeA, typename TypeB>
> struct MyInterface
> {
> virtual ~MyInterface() = 0;
>
> virtual void Foo(TypeA a, TypeB b) = 0;
> };
>
>
> I already found that I can resolve the compilation errors, by adding
>
>
> template <typename TypeA, typename TypeB>
> MyInterface<TypeA, TypeB>::~MyInterface() {}
>
>
> in the same file after the class definition, but I'm not sure if this
> is the common way to do this. Is there a correct way to do this or
> should I leave the pure virtual destructor out?
If your destructor doesn't do anything, you can give it an empty body
right in the class definition. Since you have other virtual functions
in your interface, they will be pure and the destructor doesn't have to
be. But if you just *want* your destructor pure, your solution is just
what the doctor ordered. Idiomatic.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask