Hi I’m having problems selecting the correct version of a templated class which has an explicit specialization. I’m wanting to select a specialization using a derived class of the class used to specialize. The scenario is:
#include <stdio.h>
class A
{};
class B: public A
{};
template<typename T>
class Foo
{
public:
int FooBar(void) { return 10; }
};
// Explicit specialization for A
template<> int Foo< A >::FooBar( void ) { return 20; }
void main( void)
{
Foo<B> fooB;
// This prints out 10 instead of wanted 20 ie compiler selects the general version
printf("%d", fooB.FooBar() );
}
As I say in my comments there I want to see 20 being printed out because B is derived from A but 10 gets printed out instead. How do I go about getting the specialization called without resorting to writing a specialization for each and every derived class (my actual scenario has a lot of derived types).
—EDIT : NEW ANSWER Let’s make the original approach more maintainable.
All the important choices can be found in the definition of Foo. It is supposed to be easy to maintain.
—ORIGINAL ANSWER
If you can use boost, you can do something like the following :