如果我将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;

10-02 01:06