2015-11-27 4 views
-1

Рассмотрим:Является ли этот шаблон функции специализированным или нет?

template<class Y> 
struct Foo 
{ 
    void bar(std::vector<Y>); 

    template <class T> 
    void bar(std::vector<T>); 
}; 

Какова взаимосвязь между этими двумя функциями-членами? Является ли одна специализированная форма другой? Я не хочу говорить об этом, так как первый из них уже «специализирован» на экземпляре типа Foo.

Что произойдет, если T и Y были такими же?

+0

Это выглядит как простая и простая перегрузка. –

+0

«Что будет ...» - покажите нам полный пример, о котором вы сомневаетесь. – Andrzej

+0

Необычно для вас этот вопрос не очень четко сформулирован. Можете ли вы его улучшить? – Bathsheba

ответ

3

bar - это просто перегруженная функция в вашем примере. Если Y и T совпадают, то разрешение перегрузки будет выбирать void bar(std::vector<Y>), так как это не шаблон функции.

-1
foo<int> fi; 

vector<int> vi; 
vector<float> vf; 

fi.bar(vi); // overload #1 gets chosen (more specialized for T=int) 
fi.bar(vf); // overload #2 gets chosen 
Смежные вопросы