在模板函数中仅对那些已定义函数的类型执行函数

我有一个模板函数,它接受许多不同的类型。在这些类型中,只有一种具有“ getInt()”函数。因此,我希望代码仅针对该类型运行函数。请提出解决方案。谢谢

#include <type_traits>
#include <typeinfo>

class X {
    public:
    int getInt(){
        return 9;
    }
};

class Y{

};

template<typename T>
void f(T& v){
    // error: 'class Y' has no member named 'getInt'
    // also tried std::is_same<T, X>::value 
    if(typeid(T).name() == typeid(X).name()){
        int i = v.getInt();// I want this to be called for X only
    }
}

int main(){
    Y y;
    f(y);
}
评论