Я изучаю, как использовать шаблоны в сочетании с перегрузкой функции, но я не могу ее понять; в частности, у меня есть 2 функции с тем же именем, один принимает 2 параметра int, другие 3 параметра int. Мне нужно, чтобы они возвращали соответственно двойной/тройной указатель на тип, который должен быть определен вызывающим функцией; другими словами:C++ перегруженная функция и шаблоны
template <typename T>
T** Foo(int p0, int p1){
T** ret = nullptr;
// ... do stuff with ret ...
return ret;
}
template <typename T>
T*** Foo(int p0, int p1, int p2){
T*** ret = nullptr;
// ... do stuff with ret ...
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
double** d2 = Foo(1, 2);
double*** d3 = Foo(1, 2, 3);
int** i2 = Foo(1, 2);
int** i3 = Foo(1, 2, 3);
}
Я ожидал, что d2 и i2 должны быть возвращены по первому Foo(), d3 и i3 на второе; вместо этого я получаю ошибки C2780 и C2783 от каждого из вызовов в main(). Что мне не хватает?
Что вы ожидаете 'T' быть в этих звонках? – TartanLlama
Я ожидаю, что T будет двойной для первых двух вызовов, int для других 2 – gcaglion
Как вы ожидаете, что компилятор узнает об этом? Все, что компилятор может использовать, чтобы определить параметры шаблона, являются параметрами функции шаблона. –