我创造了这个专门模板空/非空方法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