gpt4 book ai didi

用于数组、 vector 、内置类型、STL 的 C++ 模板函数

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

我想创建一个类,该类具有将发送给它的数据保存到文本文件的功能。可以传递给它的数据可以是 std::string 之类的任何东西。 , int , double , float , unsigned int等,也可以是:std::vector<T> , T[] , 和 std::vector<std::vector<T>> , T[][] .

现在,很明显,如果它是一个数组,我将需要遍历它以将数据发送到文本文件。

我在考虑使用模板,但我不确定如何使用数组。

这是要走的路吗?

class CMyClass
{
template<typename T>
void SaveData(T data);
void SaveData(std::vector<T> data);
void SaveData(std::string data);
void SaveData(T* data); // Perhaps I'll also need to pass in the size.
void SaveData(std::vector<std::vector<T>> data);
void SaveData(T** data);
};

我想 std::string 的代码与 std::vector<T> 的代码相同只要T是内置类型(如 intfloat 或其他)。

然后我为每个 SaveData(...) 编写函数相应地?

最佳答案

首先,您可以模板化类或函数。由于您也想做数组,因此您必须选择后一个选项。示例如下:

class CMyClass
{
public:
template<typename T> void SaveData(const T &data);
template<typename T, size_t N> void SaveData(const T (&data)[N]);
template<typename T, size_t N, size_t M> void SaveData(const T (&data)[N][M]);
template<typename T> void SaveData(const std::vector<T> &data);
template<typename T> void SaveData(const std::vector<std::vector<T> > &data);
void SaveData(const std::string &data);
};

定义函数后,以下示例显示如何调用它们:

int i;
int i1[5];
int i2[5][7];
std::vector<int> v1;
std::vector<std::vector<int> > v2;
std::string s;

CMyClass saveClass;

saveClass.SaveData<int>(i);
saveClass.SaveData<int>(i1);
saveClass.SaveData<int>(i2);
saveClass.SaveData<int>(v1);
saveClass.SaveData<int>(v2);
saveClass.SaveData(s);

根据您的要求,您可以将类设为单例,将函数设为静态,完全不需要实例化 CMyClass,只需按如下方式调用函数:

CMyClass::SaveData<int>(i);
CMyClass::SaveData<int>(i1);
CMyClass::SaveData<int>(i2);
CMyClass::SaveData<int>(v1);
CMyClass::SaveData<int>(v2);
CMyClass::SaveData(s);

注意事项:

  1. 参数也应该是引用(即“&data”而不是“data”),这样每次调用函数时只传递引用而不是执行整个容器的拷贝。
  2. 我已经明确地将这些函数声明为公共(public)函数,假设这是完整的类并且它的函数将被另一个类访问。默认情况下,类的成员是私有(private)的。
  3. 确保每个嵌套的“>”之间有一个空格。

祝你好运!

关于用于数组、 vector 、内置类型、STL 的 C++ 模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9373363/

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