c++禁止非期望类型调用

在有些需求的情况下,我们期望调用接口的方法,期望传入的类型必须是我想要的类型如何做呢?譬如有如下的类型定义

struct OnlyInt {
    void f(int i) {
        // code here
    }
};
OnlyInt oInt;
oInt.f(1);// 可以
oInt.f(1.0);// 也可以,那如何禁止这做非法呢?

下面我们来修改一下上面的类的定义

struct OnlyInt {
    void f(int i) {
    }
    template void f(T) = delete;// 禁止非整形调用
};
OnlyInt oInt;
oInt.f(1);// 可以
oInt.f(1.0);// 不可以,编译报错