我試圖理解爲什麼這片代碼工作不正常C++ enable_if_t SFINAE
#include <cstdio>
#include <vector>
#include <type_traits>
using namespace std;
struct Foo {
};
template<typename T, typename = void>
void compare(const T&a, const T&b) {
cout << "default" << endl;
}
template<typename T, std::enable_if_t<std::is_same<T, Foo>::value>>
void compare(const T& a, const T &b) {
cout << "In object" << endl;
}
int main(int argc, char const *argv[]) {
compare(1, 2);
{
vector<int> a, b;
compare(a, b);
}
{
Foo a, b;
compare(a, b);
}
return 0;
}
在所有情況下的「默認」被打印出來。對於最後一種情況,我期望第二個函數被調用。
謝謝!我現在理解:)在比較功能,我們需要做compare_impl ::相反,我想 –
@jack_carver - 確認,我知道我會錯過的東西。 – StoryTeller
您也可以在'compare'函數中從參數'(l,r)'切換到'(a,b)'。 –