Problem with multiple parameter templates and function overloading

N

nyl2002

I have written the following very short template class in testclass.h:

template<typename C,typename T>
class TestClass {
public:
TestClass() {};
~TestClass();
private:
T testFunction(T dummy);
};

template<typename C,typename T>
T TestClass<C,T>::testFunction(T dummy)
{
C bla;
return dummy;

}

So far it compilates fine.
Now i want to overload the testFunction:

template<typename C,typename T>
class TestClass {
public:
TestClass() {};
~TestClass();
private:
T testFunction(T dummy);
/* definition of overloaded function */
double testFunction(double dummy);
};

template<typename C,typename T>
T TestClass<C,T>::testFunction(T dummy)
{
C bla;
return dummy;

}

/* now comes the problematic part */

template<typename C>
double TestClass<C,double>::testFunction(double dummy)
{
C bla;
return dummy;
}

I get the following compiler error:

behavior/testclass.h:47: error: no `double TestClass<C,
double>::testFunction(double)' member function declared in class `
TestClass<C, double>'
behavior/testclass.h:47: error: template definition of non-template
`double
TestClass<C, double>::testFunction(double)'

If I remove the parameter C everything works fine of course.
Please can anybody help me.
I think its probably just a small problem.
 
A

amparikh

I have written the following very short template class in testclass.h:

template<typename C,typename T>
class TestClass {
public:
TestClass() {};
~TestClass();
private:
T testFunction(T dummy);
};

template<typename C,typename T>
T TestClass<C,T>::testFunction(T dummy)
{
C bla;
return dummy;

}

So far it compilates fine.
Now i want to overload the testFunction:

template<typename C,typename T>
class TestClass {
public:
TestClass() {};
~TestClass();
private:
T testFunction(T dummy);
/* definition of overloaded function */
double testFunction(double dummy);
};

template<typename C,typename T>
T TestClass<C,T>::testFunction(T dummy)
{
C bla;
return dummy;

}

/* now comes the problematic part */

template<typename C>
double TestClass<C,double>::testFunction(double dummy)
{
C bla;
return dummy;
}

Your testFunction is not a template function. I am not quite sure what
you are trying to do, but the bottom line is you have a template class.

So, if you want to have a specialized testfunction implementation for
double, then first specialize the template class TestClass for double
and then have an implementation for that.

Look up partial specialization (function templates cannot support them)
something like this...

template<typename C>
class TestClass<C, double>
{
public:
double testFunction(double dummy);
};

template<typename C>
double TestClass<C,double>::testFunction(double dummy)
{
C bla;
return dummy;
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top