如果我将float
数字传递给期望在下面的代码中使用int
的类,我想得到一个编译器错误。以下代码在gcc 4.9.3上运行
gcc -std=c++98 -O0 -g3 -Wall -Wextra -c -fmessage-length=0
如果类实例类型和方法输入参数类型之间的类型不同,我应该如何更改将返回编译错误的代码?
#include <iostream>
template <typename T>
class CheckValidity {
public:
CheckValidity(){};
T isFoo(T variable)
{
T result = static_cast<T>(0);
if ( variable > static_cast<T>(5) )
{
result = static_cast<T>(1);
}
return result;
};
};
int main() {
CheckValidity<int> checkValidityInt;
std::cout << checkValidityInt.isFoo(6.0f) << std::endl;
return 0;
}
最佳答案
对于c++ 98:
实现所需的精确匹配的一种方法是让模板方法接受任何类型,但由于SFINAE而总是失败:
template<typename U>
U isFoo(U variable)
{
typename CheckValidity::InvalidType x;
}
对于c++ 11:
您可以使用删除的方法更干净地达到相同的效果:
template<typename U>
U isFoo(U variable) = delete;