我有一个函数模板,它接受许多不同的类型。在这些类型中,只有其中一种具有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);
}
使用:
—
rafix07
if constexpr
有条件is_same_v<T,X>
。
解决方案将在今年晚些时候正式通过Concepts变得更加优雅。我知道,目前不是超级有帮助。
—
sweenish
有很多方法可以解决您的问题。上面提到的一对。你也可以使用性状不同的变种,以查看是否有型有一个可调用的
—
一些程序员老兄
getInt
成员。仅在stackoverflow.com上就必须有很多问题,如果您稍作搜索,如何查看结构或类是否具有特定的成员函数。
type_info
结构具有一个相等比较运算符,因此也typeid(T) == typeid(X)
应该工作。