gpt4 book ai didi

c++ - 具有通用输入参数的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:26 24 4
gpt4 key购买 nike

我对 C++ 比较陌生。我编写了函数WriteToFile,它写入文本文件(路径由字符串a指定)二维数组(存储在0行主序,x行,y列):

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);
}

现在我希望这个函数也能处理 intdouble 数组。对于 int,它只会按原样打印数字,对于 double %5.10lf,必须在 fprintf 中使用。我知道,这是绝对可能的。我发现了一些类似的东西,但不知道如何处理输入参数。当然,我可以编写 3 个不同的函数,但我想了解如何编写通用函数。

谢谢

最佳答案

您可以使用函数模板和一些辅助函数来获取格式字符串。

这是一个工作程序。

#include <cstdio>
#include <string>

template <typename T> char const* getFormatString();

template <> char const* getFormatString<int>()
{
return "%d\t";
}

template <> char const* getFormatString<float>()
{
return "%5.5f\t";
}

template <> char const* getFormatString<double>()
{
return "%15.10lf\t";
}

template <typename T>
void WriteToFile(std::string a, const T *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, getFormatString<T>(), img[i*y + j]);
fprintf(pFile, "\n");
}
fclose(pFile);
}

int main()
{
int img1[] = {1, 1, 1, 1};
float img2[] = {1, 1, 1, 1};
double img3[] = {1, 1, 1, 1};
WriteToFile("int.img", img1, 2, 2);
WriteToFile("float.img", img2, 2, 2);
WriteToFile("double.img", img3, 2, 2);
}

关于c++ - 具有通用输入参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28438336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com