我想从可以保存许多不同类型数据的文件类型中加载图像:像素可以编码为float
s、double
s、unsigned char
s、char
s(类似于 TIF 文件)。加载后我将对图像数据进行的所有处理都取决于加载的数据类型。我已经有一个函数,它可以在给定文件路径和数据类型的情况下从 C 中处理我的文件类型的外部库加载适当的数据:
/* loads image with pixels of type T in a 1D array (fine for my use case) */
template <typename T> std::vector<T> loadImg(std::string path) {
std::vector<T> imgData;
file imgFile = libOpen(path);
imgData.resize(imgFile.height * imgFile.width);
libReadImg(imgFile, imgData.data());
return imgData;
}
我想要的是有一个“通用”加载器,我的程序的用户可以从中指定他们想要的任何类型的支持文件,它会加载它们并在运行时定义要返回的正确类型的模板:
/* load the user's selected files : */
template <> /*what do I put here in template argument ?*/
std::vector</*and here ?*/> loadAnyImg(std::string path) {
file imgFile = openFile(...);
if (imgFile.type == int) {
return loadImg<int>(path);
}
if (imgFile.type == unsigned char) {
return loadImg<unsigned char>(path);
}
/* ... */
}
有没有办法在 C++ 中做这样的事情?在那之前我已经处理了很多模板,但在这个特定的用例中没有。
快速编辑:当然,我还可以将所有加载的数据转换为具有最小/最大界限的内部格式(即,将所有像素数据转换为double
具有除此之外的类型的最小/最大界限)。但我想尽可能保持数据不变