如何仅使用一个函数或/和重载运算符转换将char *转换为通用数据类型?

问题描述 投票:0回答:2

我有一个模板类Polinom,它使用通用的数据类型(int,float,double,类Complex(由我定义)),我想使用此函数读取字符串并将其转换为Polinom,并构造一个构造函数:

Polion.cpp

 template<typename T>
 istream& operator>>(istream& in, Polinom<T>& P) {
     char line[1000];
     in.getline(line, 1000);
     int gr = -1;
     T cf[100];
     char* pt;
     pt = strtok(linie, " ");
     while (pt) {
        cf[++gr] = T(pt);
        pt = strtok(NULL, " ");
     }
     P = Polinom<T>(gr, cf);
     return in;
 }

Complex.cpp

  Complex::Complex(const char* str){
    /*
    ...
    */
    }

当我使用复杂数据类型时,一切都很好(Polinom a(12,4);std :: cout << a << endl;)//我为此行定义了一个好友ostream函数;)因为我写了这个构造函数Complex :: Complex(const char * str)

当我使用原始数据类型时出现问题

   Polinom<int> a(12, 4); because of T(const char* ) ===> int(const char*)

我该如何解决?非常感谢!

c++ generics casting overloading operator-keyword
2个回答
0
投票

这似乎是您在重新发明轮子。 operator>>已经有适当的int。您应该为Complex添加一个重载,以便每个in >> cf[gr++]都会编译T


0
投票

我这样更新了代码:

© www.soinside.com 2019 - 2024. All rights reserved.