Я хочу изменить порядок экземпляров шаблонов перегрузки. Мой код является следующим:Как изменить заказ шаблона шаблона?
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
struct Base
{
};
template<typename T>
struct Derived:Base<T>
{
};
//template 1
template<typename T1>
void f(Base<T1>& a){
cout<<"in 1\n";
}
//template 2
template<typename T2>
void f(T2 b){
cout<<"in 2\n";
}
int main(){
Derived<int> v1;
f(v1);
}
Завещания компилятора выбрало шаблон 2 по умолчанию, но я хочу, чтобы выбрать шаблон 1.
'F (v1)', не позволяют ей найти шаблон для вас ... правила шаблона при создании экземпляра иногда удивительно, если вы позволите компилятор выводит типы. –
Вы должны использовать диспетчер SFINAE или тегов или указать, какую функцию вызывать на сайте вызова. – Jarod42
Вы должны подробно описать, что вы хотите сделать с 'b' в шаблоне 2 и какие аргументы вы хотите * разрешить. Есть простые решения, которые не включают диспетчеризацию тегов, SFINAE или черты, если все, что вы хотите сделать, это напечатать '" в 2 "'. –