我有一個名爲function
例如具有以下簽名的簡單功能:無法推斷出模板參數的重載函數
class Type { /* ... */ };
bool function(const Type& aValue) { /* ... */ return true; }
我有一些其他類,我想超載提到的功能,所以只有從Base
派生的類可以使用它:
class Base { /* ... */ };
class Derived : public Base { /* ... */ };
template < typename T >
bool function(const typename std::enable_if< std::is_base_of< Base, T >::value, T >::type& aValue) { /* ... */ return true; }
這是工作的罰款,如果我用這樣的:
Derived object;
function<Derived>(object);
但是如果我離開這個模板參數我得到的提到的錯誤(無法推斷出模板參數):
Derived object;
function(object); // Compilation error (C2664).
是否有任何解決方案,我可以離開模板參數?
(MSVC 2012)
Isnt T在非推論的上下文中:'std :: is_base_of < Base, T > :: value'?看到這裏參考http://stackoverflow.com/questions/25245453/what-is-a-nondeduced-context – marcinj
這不是一個編譯器問題。 T不能從這裏推導出來,因此沒有編譯器會成功 –