프로젝트에서 SFINAE 기능을 많이 사용하고 있으며 다음 두 가지 접근 방식 (스타일 이외)에 차이가 있는지 확실하지 않습니다.
#include <cstdlib>
#include <type_traits>
#include <iostream>
template <class T, class = std::enable_if_t<std::is_same_v<T, int>>>
void foo()
{
std::cout << "method 1" << std::endl;
}
template <class T, std::enable_if_t<std::is_same_v<T, double>>* = 0>
void foo()
{
std::cout << "method 2" << std::endl;
}
int main()
{
foo<int>();
foo<double>();
std::cout << "Done...";
std::getchar();
return EXIT_SUCCESS;
}
프로그램 출력은 다음과 같습니다.
method 1
method 2
Done...
방법 2가 스택 오버 플로우에서 더 자주 사용되는 것을 보았지만 방법 1을 선호합니다.
이 두 가지 접근 방식이 다른 상황이 있습니까?