Выбор явной специализации класса на основе производного типа

Привет у меня есть проблемы при выборе правильной версии шаблонного класса, который имеет явную специализацию. Я желаю выбрать специализацию с помощью производного класса класса, используемого для специализации. Сценарий:

#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() );
}

Поскольку я говорю в своих комментариях там, что хочу видеть 20 распечатываться, потому что B получен из A, но 10 распечатывается вместо этого. Как я иду о получении специализации, названной, не обращаясь к записи специализации для каждого производного класса (мой фактический сценарий имеет много производных типов).

7
задан user176168 31 January 2010 в 14:50
поделиться