Re: subclassing question
On Nov 1, 6:50 am, David Wilkinson <no-re...@effisols.com> wrote:
PaulH wrote:
I have a c++ template class derived from another template class. Call
them ClassB and ClassA, respectively. I would like to be able to use
all of the ClassA functions in an instance of ClassB, but extend some
of them as in the code below.
Unfortunately, I get a compiler error:
error C2660: 'ClassB< T >::SomeFunction' : function does not take 3
arguments
When can I do to get the functionality I want?
Thanks,
PaulH
template< typename T >
class ClassA
{
void SomeFunction( int A, int B, bool C )
{
// ...
}
// ...
}
template< typename T >
class ClassB : public ClassA< T >
{
void SomeFunction( int A, int B )
{
// ...
}
// ...
}
void main()
{
ClassB< int > instance;
instance.SomeFunction( 1, 2 ); // works fine
instance.SomeFunction( 1, 2, 3 ); // error!
}
PaulH:
As Doug says, this has nothing to do with templates.
Why do you want to give your two-argument method in B the same name as th=
e
three-argument one in A?
If the signatures were the same, you could at least say that you wanted B=
to be
a drop-in replacement for A (which you have to be careful not to use
polymorphically). But with different signatures, it serves no purpose.
--
David Wilkinson
Visual C++ MVP
ClassA typically requires you to open a handle to a resource and then
use that resource handle as the first argument to SomeFunction(). The
other arguments to SomeFunction() are parameters on how to use that
resource.
ClassB derives not only from ClassA but also from a ClassC (which I
did not show in my earlier example). ClassC is a wrapper for that
resource.
So, ClassB::SomeFunction() looks a bit like this:
ClassB::SomeFunction( int A, int B )
{
HANDLE C = OpenResource(); // This function is from "ClassC"
return SomeFunction( C, A, B );
}
So, the benefit of ClassB is that my program no longer has to manage
that resource separately. It's handled by virtue of using ClassB and
the result of using "SomeFunction()" is the same.
-PaulH