我想通过不允许隐式类型转换(如string-> bool从而引发编译错误)来实现模板类参数的类型检查。 具体情况如下简单:类型检查模板类参数
#include <iostream>
#include <string>
using namespace std;
template <class T>
class myPair {
T a, b;
public:
myPair(T first, T second) {
a = first;
b = second;
}
void test();
};
typedef myPair<bool> boolParm;
template<class T>
void myPair<T>::test() {
if(a == true) {
cout << "a is true" << endl;
} else {
cout << "a is false" << endl;
}
if(b == true) {
cout << "b is true" << endl;
} else {
cout << "b is false" << endl;
}
}
int main() {
boolParm myObj(false, "false");
myObj.test();
return 0;
}
上述场景的输出是不期望的,因为用户可能会在无意中通过2种不同类型:布尔和字符串和接收的第一个为假(正确的,因为通过作为布尔),但第二个将是真实的(不正确,因为从字符串隐式类型转换为布尔)。 我希望限制main()中的用户代码抛出编译错误,并禁止在构造函数中传递字符串/整型参数。它应该只允许bool。 我尝试通过使用重载的构造函数myPair(布尔第一,字符串第二),但它不匹配,因为我猜字符串的默认类型转换发生在调用构造函数之前。 在这种情况下是否有使用模板专业化的解决方案? 高度赞赏任何帮助 谢谢
啊因为这里它是模板分辨率失败而不是参数转换!巧妙! – codeling
感谢您的意见...我的问题是main()中的部分是用户代码,我不能要求用户更改他们的代码或支持上面格式的已经写好的用户代码..我只能修改基类即myPair来实现这个功能。 –
@gigaplex:您可以在第二个选项中提到关于如何在此场景中使用专业化的更多细节! –