我創造了這個專門模板空/非空方法C++ 11 - 模板的std :: enable_if和std ::的result_of
template <typename ClassType,
typename MethodType, MethodType MethodName,
typename std::enable_if <std::is_same<void, std::result_of<decltype(MethodName)(ClassType)>::type>::value> ::type* = nullptr
>
static int function()
{
//void
//....
}
template <typename ClassType,
typename MethodType, MethodType MethodName,
typename std::enable_if <!std::is_same<void, std::result_of<decltype(MethodName)(ClassType)>::type>::value> ::type* = nullptr
>
static int function()
{
//non-void
//....
}
//And I want to call it like this
function<Foo, void (Foo::*)(void), &Foo::Print>();
function<Foo, int (Foo::*)(void), &Foo::Print2>();
(基於這樣的回答:C++ template parameter as function call name)
Hovewer,這給我一堆錯誤(MSVC 2015)。如果我在
內運行template <typename ClassType,
typename MethodType, MethodType MethodName
>
static int print()
{
std::cout << "C: " << std::is_same<void, std::result_of<decltype(MethodName)(ClassType)>::type>::value << std::endl;
}
我得到true
結果。
是否有可能「專業化」創建功能爲MethodName
的無效/非空效果?
就像idenote,如果你想檢查無效只是使用is_void,它比__same –
@AdrianLis我知道,我也試過,但也有同樣的結果(加上在某些情況下,我不想測試無效,這是隻是爲了簡化示例;-)) –
你還沒有發佈你得到的錯誤,但我可以看到你在'std :: result_of <...>' – MarekR