Специализация шаблона функции для деривации определенного типа - PullRequest
1 голос
/ 19 октября 2011
class base
{
};

class derived
{
};

template<class T> void foo() {}


int main()
{
    foo<int>();
    foo<derived>();
}

Я хочу специализироваться foo для Т = деривация base. Это возможно или мне нужно специализироваться на base самой?

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Вы можете комбинировать boost :: enable_if и boost :: is_base_of, как описано в руководстве для boost :: enable_if .

template <class T>
T foo(typename enable_if<boost::is_base_of<base,T> >::type* dummy = 0); 
0 голосов
/ 19 октября 2011

Один из вариантов - использовать черты типа повышения (или, если вы чувствуете себя храбрым, посмотрите на источник этой библиотеки).

Во время компиляции вы можете определить, наследуется ли типдругой тип и поэтому выберите подходящую реализацию.

...