আমি একটি প্রকল্পে ভারী 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 পছন্দ করি।
এই দুটি পদ্ধতির মধ্যে পার্থক্য থাকলে কি কোনও পরিস্থিতি রয়েছে?