我使用模板类类型数据类型作为类方法的参数。在那种方法中,我正在计算参数的差异并打印它。这只是来自实际项目的示例代码。
头文件.h
#ifndef Header_h
#define Header_h
#include <iostream>
#include "string.h"
template <class T>
class Student
{
public:
Student(T);
void calcDifference(int idx, T val1, T val2);
};
#endif
主文件
#include <iostream>
#include "Header.h"
using namespace std;
template <class T>
void Student<T>::calcDifference(int idx, T val1, T val2)
{
T difference = val1 - val2;
cout<<"\nDifference values: "<<difference<<endl;
}
template <class T>
Student<T>::Student(T)
{
cout<<"constructor called";
}
int main(int argc, const char * argv[])
{
Student<int> oStudent(10);
oStudent.calcDifference(1, 12, 10);
//THIS FOLLOWING OBJECT CREATES ERROR BECAUSE IT IS TRYING TO PASS STRING TYPE
Student<string> o2_Student("hi");
o2_Student.calcDifference(1, "aaa", "aa");
return 0;
}
问题:因为,我正在尝试计算 中的参数之间的差异,其中尝试传递字符串calcDifference()
的第二个对象会产生问题。main()
这是因为无法在字符串上执行差分操作(至少直接)。
错误: /Users/siddharth/coding/cplusplus/xCode/CPPCodes/InterviewTest/InterviewTest/main.cpp:9:26: Invalid operands to binary expression ('std::__1::basic_string<char>' and 'std::__1::basic_string<char>')
我需要什么:我希望代码保持通用(对于我无法实际更改的调用函数)。我想找到一些解决方案,这样我就不会得到这个编译器错误,如果传递的参数是字符串类型,那么calcDifference()
应该打印一个语句(如“不允许字符串数据类型”)并返回到调用函数。我可以在calcDifference()
ONLY内部进行更改,因为在实际项目中我无法控制调用函数。我认为在这种情况下异常处理无济于事,因为它有助于捕获运行时错误,但在这种情况下,我收到编译时错误,因为调用函数试图传递字符串(模板 T 被设为字符串)。
PS: 我无法对这个结构进行任何更改,这意味着我什至无法更改参数的数量等。我只能在方法内部进行更改calcDifference()
。