有没有类似于stoi的函数可以用于模板类
Is there a function similar to stoi that would work for a template class?
我上周为一个作业创建了一个复数类,我们的下一个作业是将这个类修改为模板类。任务的一部分是重载提取运算符,最初只处理int时,我将整个输入行作为字符串,并为实数和虚数部分生成子字符串,然后我使用stoi将这些部分转换为可以存储的int(这是我的教授建议做的(。然而,现在这是一个模板类,如果使用的类型是double、float等,stoi就不再工作了。有没有一个函数可以类似地工作,但可以跨不同的类型?或者可能是另一种可能更好的解决方案?
我尝试使用if语句来检测正在使用的类型,然后使用stoi、stod等。然而,这似乎不太理想,因为它只适用于我明确定义的类型,我确信这不是他们想要的。
template <class T>
istream& operator>>(istream& in,MyComplex<T> &num){
string inString;
getline(in, inString);
T test = 3.33;
if(test != 3.33){
//convert using stoi
}
else if(test == 3.33){
//convert using stod
}
//etc.
}
我省略了括号内的内容,因为它很长,并且不会改变我只能为有限数量的数据类型定义的事实。提前感谢您的帮助!
我建议直接使用输入流。您的输入格式似乎是2.3 + 5i
,因此您可以使用以下代码:
double a,b;
char c;
in >> a >> c >> b; // c eats the +; let's the i in the in
in >> c; // eats the i
注意,我们也可以在同一行中使用c
两次,我只是想为我的评论留出空间,所以我把它放在下一行。
代码的一个更一般的注释:检查T
是什么类型(或者可能只是检查类型具有什么属性,因为你可能不需要区分int
和long
(的"正确"方法是使用类型特征。
但是,对于不同类型有完全不同的实现,您应该使用不同的实现。因此,声明一个采用MyComplex<double>
的方法,一个采用MyComplex<int>
的方法,等等。
相关文章:
- 类似于strcat()的函数出现问题
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 算术运算的结果类似于:C浮点变量中的1/3
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 创建类似于布尔值的变量类型
- 如何在 Arduino 字符串的开头添加元素.类似于 JS unshift();
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何创建类似于 QVariant 的变体类
- 对于多个字符(如 ETX/STX 对),是否有类似于 std::quote 的东西
- 初始化命名空间中的变量是否类似于将它们初始化为类成员?
- C++中用于结构的纯数组的类似于TableView/DataFrame的通用功能
- 有没有类似于stoi的函数可以用于模板类
- 计算 1 - sqrt(x) 用于小参数 x (~10^-12),类似于 expm1(在 C/C++ 中)
- stl或boost中是否存在用于线程间通信的线程安全结构,其行为类似于队列
- 用于c ++的特征值库,建议,如何实现,从fortran中寻找类似于dgeev的东西
- 有没有类似于Thrust(GPU的并行STL)的库,但适用于GPGPU AMD Radeon
- 程序类似于智能汇编,但适用于C++
- 是否有API用于生成格式良好的非托管C++(类似于CodeDOM)
- 是否有一些类似于boost program_options的c++库/源代码,但用于*键盘快捷键自动生成帮助*