Re: pure virtual function in template class
Mike -- Email Ignored wrote:
On Thu, 10 Jul 2008 12:48:36 -0400, Victor Bazarov wrote:
Mike -- Email Ignored wrote:
On Thu, 10 Jul 2008 10:56:16 -0400, Victor Bazarov wrote:
[...]
It's the case when too much information actually hurt. What clacker
is telling you is that you can't have a template member declared
virtual (pure or not):
class foo {
template<class T> virtual void bar(T const&); // error
};
, that's, all.
V
Then my working example is just dumb luck?
"Dumb luck"? I am not sure how that is applicable here. Your example
has no virtual functions that are member templates.
Then what is my function:
virtual void doChild(TYP a)=0;// pure virtual member function
It's a pure virtual function, a member of the class template. Since it
is a member of a template, it is a template itself, but it's not a
member template. It's a template member. Confusing, isn't it?
Why is this ok?
Why wouldn't it be? Every instance of your class template gets its own
virtual function. For example, your BaseT<int> has
virtual void BaseT<int>::doChild(int) = 0;
and it's pure, so any derived class has to override it if it wants to be
non-abstract (and your 'Child' provides it); and if you had some other
instance of your template, say, 'BaseT<std::vector<std::string> >', then
it would have
virtual void BaseT<std::vector<std::string> >
::doChild(std::vector<std::string> ) = 0;
which also has to be overridden in the derived class, should you want to
instantiate the derived class by itself (make it non-abstract).
Please feel free to ask more questions.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask