按第一个模板参数的类型排除成员

时间:2017-04-06 05:12:22

标签: c++ templates

我使用VS2013编译器构建这些成员函数:

template<typename R, typename ...Args>
fc::variant memberfoo( const std::function<R(Args...)>& f, variants::const_iterator a0, variants::const_iterator e )const
{
    return fc::variant(f(Args...)); // error C2440: '<function-style-cast>' : cannot convert from 'void' to 'fc::variant'
}

template<typename ...Args>
fc::variant memberfoo(const std::function<void(Args...)>& f, variants::const_iterator a0, variants::const_iterator e)const
{
    f(Args... );
    return fc::variant();
}

我认为错误的原因是编译器没有按当前模板类型的参数选择成员&#34; std :: function&lt; void(Args ...)&gt; &安培;&#34;在这种情况下,他选择第一个memberfoo。

如何帮助编译器按类型std :: function&lt;选择成员some_function_declaration&gt; ?或者其他一些提示如何调整代码以进行编译?

0 个答案:

没有答案