又一個模板問題!我試圖得到一個模板方法,如果它對於運營商< <有過載,將會輸出一個對象。 我幾乎所有的工作,並實施了一個enable_if爲了使g ++爲每種類型的對象選擇預期的專業化。模板專精不明確
事情是,與一個非重載的對象,它工作得很好。但是如果超載,我的兩個專業化都是g ++的合理選擇,而不是編譯它會輸出一個模糊的過載錯誤。
下面的代碼:
template<typename T>
static void Print(Stream& out, T& param, typename enable_if<CanPrint<T>::value>::type = 0)
{
out << param;
}
template<typename T>
static void Print(Stream& out, T& param)
{
out << "/!\\" << typeid(param).name() << " does not have any overload for <<.\n";
}
我明白爲什麼這樣的事情是不明確的。然而,我想不出一種更明顯的方式......我如何讓編譯器明白第二個重載只能在第一個重載不能被選擇時才被選擇?
是的,但這是事實上。我如何使它工作? –