我正在尝试根据类模板参数确定调用哪个成员函数的版本。我已经尝试了这个方法:
我原以为这是在说“如果T是int,则使用第一个MyFunction,如果T不是int,则使用第二个MyFunction”,但是我得到了编译器错误,错误信息是“错误:在‘struct std::enable_if’中没有名为‘type’的类型”。有人能指出我在这里做错了什么吗?
#include <iostream>
#include <type_traits>
template<typename T>
struct Point
{
void MyFunction(typename std::enable_if<std::is_same<T, int>::value, T >::type* = 0)
{
std::cout << "T is int." << std::endl;
}
void MyFunction(typename std::enable_if<!std::is_same<T, int>::value, float >::type* = 0)
{
std::cout << "T is not int." << std::endl;
}
};
int main()
{
Point<int> intPoint;
intPoint.MyFunction();
Point<float> floatPoint;
floatPoint.MyFunction();
}
我原以为这是在说“如果T是int,则使用第一个MyFunction,如果T不是int,则使用第二个MyFunction”,但是我得到了编译器错误,错误信息是“错误:在‘struct std::enable_if’中没有名为‘type’的类型”。有人能指出我在这里做错了什么吗?
template<typename T> struct Point { void MyFunction() requires (std::is_same_v<T, int>); void MyFunction() requires (!std::is_same_v<T, int>); };
。 在这里,约束表达式为非相关且false是可以的-这只是在重载决议过程中使整个函数不那么优先考虑。 - aschepler