В приведенном ниже фрагменте кода,
template<typename T1>
void func(T1& t)
{
cout << "all" << endl;
}
template<typename T2>
void func(T2 &t)
{
cout << "float" << endl;
}
// I do not want this
// template<> void func(float &t)
int main()
{
int i; float f;
func(i); // should print "all"
func(f); // should print "float"
return 0;
}
Я хотел бы изменить шаблоны, которые при передаче любого типа, кроме float, будут печатать «all», а передача float - «float». Я не хочу шаблонную специализацию, вместо этого имею частичную специализацию, которая будет действовать соответственно на основе типа ввода. Как я должен идти об этом. Заранее спасибо.
Ну, сценарий, с которым я сейчас сталкиваюсь, похож,
Мне нужно определить следующее,
template<typename T1>
void func(T1 &t)
{
cout << "t1" << endl;
}
template<typename T2>
void func(T2 &t)
{
cout << "t2" << endl;
}
Следующие вызовы должны вывести «t2»
func(int) // print "t2"
func(float) // print "t2"
func(string) // print "t2"
Следующие вызовы должны вывести «t1»
func(char) // print "t1"
func(xyz) // print "t1"
...
func(abc) // print "t1"
какая-то группировка, подобная описанной выше, где немногие должны вызывать реализацию частичной специализации, а другие должны вызывать реализацию по умолчанию.