Próbuję określić, która wersja funkcji składowej zostanie wywołana na podstawie parametru szablonu klasy. Próbowałem to:Wybieranie funkcji składowej przy użyciu różnych warunków enable_if
#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();
}
który myślałem mówi „użyć pierwszego MyFunction jeśli T jest int i użyć drugiego MyFunction jeśli T nie jest int, ale otrzymuję błędy kompilatora mówiąc:” Błąd: Nie Typ nazwie 'type' w 'struct std :: enable_if' ". Czy ktoś może wskazać, co robię źle tutaj?
pokrewne Q & A: [ "Co się stało z moim SFINAE" (Redux)] (http://stackoverflow.com/questions/11531989/what-happened-to-my-sfinae-redux-conditional-template-class-members) – HostileFork