2013-05-04 135 views
1

我想使用函數簽名作爲模板參數。它的偉大工程類,但是當我嘗試同樣的伎倆函數模板,MSVC拋出一個錯誤:函數簽名作爲函數模板參數

error C2768: 'Func' : illegal use of explicit template arguments

這裏是我的代碼:

template <typename Signature> 
void Func(); 

template <typename R, typename A1> 
void Func<R(A1)>(); 

我應該怎麼做才能使其工作?

回答

4

你不能部分專門化一個功能模板,這是語言不支持的。你可以做的是創建一個具有靜態成員函數的部分專用模板,並可能會實例化該類模板並調用該靜態函數的蹦牀功能。

事情是這樣的:

namespace detail 
{ 
    template<typename Signature> 
    struct helper; 

    template<typename R, typename A1> 
    struct helper<R(A1)> 
    { 
     static void call() 
     { 
      // Do stuff with R and A1... 
     } 
    }; 
} 

template<typename Signature> 
void Func() 
{ 
    detail::helper<Signature>::call(); 
}