Click here to Skip to main content
15,890,282 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: deriving a non-template class from a template class Pin
Sarath C26-Dec-07 14:39
Sarath C26-Dec-07 14:39 
GeneralRe: deriving a non-template class from a template class Pin
Californian226-Dec-07 14:50
Californian226-Dec-07 14:50 
GeneralRe: deriving a non-template class from a template class Pin
Sarath C26-Dec-07 15:28
Sarath C26-Dec-07 15:28 
GeneralRe: deriving a non-template class from a template class Pin
Californian226-Dec-07 15:59
Californian226-Dec-07 15:59 
GeneralRe: deriving a non-template class from a template class Pin
Sarath C26-Dec-07 16:04
Sarath C26-Dec-07 16:04 
GeneralRe: deriving a non-template class from a template class Pin
Californian227-Dec-07 8:56
Californian227-Dec-07 8:56 
QuestionRe: deriving a non-template class from a template class Pin
Californian226-Dec-07 14:39
Californian226-Dec-07 14:39 
NewsRe: deriving a non-template class from a template class Pin
Californian227-Dec-07 8:51
Californian227-Dec-07 8:51 
It turns out that using template class Base<INT>; is the answer after all.

For anyone else out there with the same question, here is what finally worked for me. In a .h file, the template class and derived class are declared as follows:

template <class T>
class Base {
public:
Base();
Base(INT);
virtual ~Base();
virtual INT f();
virtual INT g(INT);
INT n;
T* x;
};

class Derived : public Base<INT> {
public:
Derived(): Base() {};
Derived(INT): Base() {};
~Derived();
INT h(FLOAT);
};

The implementation is done in a separate .cpp file. Use explicit instantiation, that is, use the following line in that file:

template class Base<INT>;

and for the template class methods, use:

template <class T> INT Base<T>::f()
{
// (code here)
}

template <class T> INT Base<T>::g(INT num)
{
// (code here)
}

The derived class methods use the usual syntax for any class method.

That's it!

As a side note, the compiler and linker don't complain (and the application runs fine) if I declare the template class methods using either virtual INT Base<T>::g(INT); or virtual INT g(INT);, that is, if the class declaration is either:

template <class T>
class Base {
public:
// CONSTRUCTORS:
Base();
Base(INT);
// DESTRUCTOR:
virtual ~Base();
// METHODS:
virtual INT Base<T>::f();
virtual INT Base<T>::g(INT);
// DATA:
INT n;
T* x;
};

or:

template &lt;class T&gt;
class Base {
public:
Base();
Base(INT);
virtual ~Base();
virtual INT f();
virtual INT g(INT);
INT n;
T* x;
};

I don't know where I picked up the syntax for the first version, though, so I used the second version in the end.

Thanks to those who made comments!

Big Grin | :-D
GeneralWNetAddConnection returning 487 Pin
Still learning how to code26-Dec-07 10:20
Still learning how to code26-Dec-07 10:20 
AnswerRe: WNetAddConnection returning 487 Pin
Still learning how to code26-Dec-07 11:53
Still learning how to code26-Dec-07 11:53 
Generala very wierd problem Pin
gizmokaka26-Dec-07 10:14
gizmokaka26-Dec-07 10:14 
GeneralRe: a very wierd problem [modified] Pin
Californian226-Dec-07 10:40
Californian226-Dec-07 10:40 
GeneralRe: a very wierd problem Pin
gizmokaka26-Dec-07 11:20
gizmokaka26-Dec-07 11:20 
GeneralRe: a very wierd problem Pin
Californian226-Dec-07 11:33
Californian226-Dec-07 11:33 
GeneralRe: a very wierd problem Pin
CPallini26-Dec-07 22:22
mveCPallini26-Dec-07 22:22 
GeneralRe: a very wierd problem Pin
Luc Pattyn26-Dec-07 16:41
sitebuilderLuc Pattyn26-Dec-07 16:41 
GeneralRe: a very wierd problem Pin
David Crow27-Dec-07 4:28
David Crow27-Dec-07 4:28 
GeneralReceiving data from ListBox in another program. Pin
int01h26-Dec-07 9:31
int01h26-Dec-07 9:31 
GeneralRe: Receiving data from ListBox in another program. Pin
CPallini26-Dec-07 10:55
mveCPallini26-Dec-07 10:55 
GeneralRe: Receiving data from ListBox in another program. Pin
Hamid_RT28-Dec-07 5:07
Hamid_RT28-Dec-07 5:07 
GeneralWhy it is not good code for constructor Pin
George_George26-Dec-07 3:09
George_George26-Dec-07 3:09 
GeneralRe: Why it is not good code for constructor Pin
CPallini26-Dec-07 3:29
mveCPallini26-Dec-07 3:29 
GeneralRe: Why it is not good code for constructor Pin
George_George26-Dec-07 3:50
George_George26-Dec-07 3:50 
GeneralRe: Why it is not good code for constructor Pin
Sarath C26-Dec-07 4:09
Sarath C26-Dec-07 4:09 
GeneralRe: Why it is not good code for constructor Pin
George_George26-Dec-07 18:19
George_George26-Dec-07 18:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.