使用一个模板c ++

时间:2017-10-04 03:56:07

标签: c++ arrays templates text-files

尝试使用一个模板打印3个不同类型的不同数组以分隔文本文件。

这就是我所拥有的:

template <class T>
void givetxt(T *a, const int n)
{
    ifstream infile("C:\\.txt", ios::in | ios::app);
    for (int i = 0; i<n; i++)
    {
        infile >> a[i];
    }
    infile.close();
}

template <class T>
void savetxt(const T *a, const int n)
{
    ofstream outfile("C:\\.txt", ios::out | ios::app);
    for (int i = 0; i<n; i++)
        outfile << a[i] << endl;
    outfile.close();
}

int main()
{
    const int n1 = 5, n2 = 7, n3 = 6;
    int a[n1];
    float b[n2];
    char c[n3];

givetxt(a, n1);
savetxt(a, n1);

givetxt(b, n2);
savetxt(b, n2);

givetxt(c, n3);
savetxt(c, n3);

现在它将所有数组数据发送到.txt。理想情况下,我可以将其打印到.inttxt.floattxt.chartxt。我不知道如何调整infile / outfile以允许其他数组的单独文本文件。我尝试了指针,但模板不允许我将T a*const int nmain中的变量相关联。推动正确的方向将是最受欢迎的。

1 个答案:

答案 0 :(得分:0)

在这种情况下,重载函数(如评论中所说的Artemy Vysotsky)是最好的。

例如:

template<typename T>
void savetxt(T *a, const int n, const char* sFilename)
{
    ofstream outfile(sFilename, ios::out|ios::app);
    // remaining code to save the file
    ...
    ...
    ...
 }
 void savetxt(int *a, const int n)
 {
    savetxt(a, n, "c:\\inttxt.txt");
 }
 void savetxt(float *a, const int n)
 {
    savetxt(a, n, "c:\\floattxt.txt");
 }
 void savetxt(char *a, const int n)
 {
    savetxt(a, n, "c:\\inttxt.txt");
 }