Привет у меня есть проблемы при выборе правильной версии шаблонного класса, который имеет явную специализацию. Я желаю выбрать специализацию с помощью производного класса класса, используемого для специализации. Сценарий:
#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 распечатывается вместо этого. Как я иду о получении специализации, названной, не обращаясь к записи специализации для каждого производного класса (мой фактический сценарий имеет много производных типов).