Я относительно новичок в C++. Я написал функцию WriteToFile
, которая записывает в текстовый файл (путь задается строкой a
) 2D массива (хранится в 0-строки основного порядка, х строк, у колонок):Функция с общими входными параметрами
void WriteToFile(std::string a, const float *img, const int x, const int y) {
FILE *pFile;
const char * c = a.c_str();
pFile = fopen(c, "w");
for (int i = 0; i < x; i++){
for (int j = 0; j < y; j++)
fprintf(pFile, "%5.5f\t", img[i*y + j]);
fprintf(pFile, "\n");
}
fclose(pFile);
}
Теперь я хочу эту функцию, чтобы иметь дело также с int
и double
массивами. Для int
он просто напечатает номера, как есть, и для двойного %5.10lf
должен использоваться в fprintf
. Я знаю, что это абсолютно возможно. Я нашел пару похожих вещей, но не понял, как справляться с входными аргументами. Конечно, я могу написать 3 разные функции, но я хочу узнать, как написать общую функцию.
Благодаря
Спецификатор формата зависит от типа массива, поэтому, вероятно, вам понадобится три разных вызова/логики, чтобы фигурировать в какой-то момент этого кода, или могут быть аргументами сложения для добавления типа – P0W
. Вы можете использовать класс 'fstream' и либо добавьте перегруженный 'operator <<' в ваш матричный класс, либо используйте свободную стоячую функцию для записи 2d-массива в 'fstream'. 'Fstream' уже настроен для обработки других типов объектов, таких как' double'. –
Возможный дубликат [возможно ли сделать функцию, которая будет принимать несколько типов данных для данного аргумента?] (Http: // stackoverflow.com/questions/8627625/is-it-possible-to-make-function-that-will-accept-multiple-data-types-for-given-a) –