В моем коде C++/CLI у меня есть около 20 различных классов. Я перегрузил функцию print
20 раз, чтобы обрабатывать экземпляр каждого класса. Теперь мне нужно дополнительно поддерживать массивы объектов каждого из этих 20 классов и ненавидеть писать еще 20 перегрузок, которые в основном являются дословными копиями друг друга. В качестве примера, смотри ниже:Использование массива <> в общей функции
void print(int i){
Console::WriteLine("Integer: {0}", i);
}
void print(String ^s){
Console::WriteLine(L"Hello " + s);
}
generic <typename T>
void print(array<T> ^ts){
for(int i = 0, n = ts->Length; i < n; ++i)
print(ts[i]);
}
int main(array<System::String ^> ^args)
{
array<String^> ^s = gcnew array<String^>{ L"apple", L"ball", L"car" };
print(s);
Console::WriteLine(L"Hello World");
return 0;
}
Но приведенные выше результаты в следующей ошибки:
error C2665: 'print' : none of the 2 overloads could convert all the argument types
Почему это не компилировать? Какая альтернатива тому, что я пытаюсь сделать?
Как вы это называете? –
@LightnessRacesinOrbit, я обновил код, включив вызывающую функцию (main) –
Спасибо. Это очень важно. –