我试图通过禁止隐式类型转换(如 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 种不同的类型:bool 和 string,并且将第一个接收为 false(因为传递为 bool,所以正确)但第二个将是 true(因为从 string 进行隐式类型转换,所以不正确布尔值)。我希望限制 main() 中的用户代码引发编译错误并禁止字符串/int 参数传入构造函数。它应该只允许布尔。我尝试使用重载的构造函数 myPair(bool first, string second) 但它不匹配,因为我猜 string->bool 的隐式类型转换发生在调用构造函数之前。在这种情况下是否有使用模板专业化的解决方案?非常感谢任何帮助谢谢