将可变参数解析为函数指针

Resolve variadic argument to function pointer

Windows10,Visual Studio2019,C++17:

编译错误: 无法将参数 2 从 'int (__cdecl *)(int)' 转换为“...”

////////////////////////////////////////////////////////////////////
// This is the templated function that becomes a variadic argument
//
template <typename siz> 
int func(siz size)
{
    // ...
    // ...
    return 0;
}
///////////////////////////////////////////////////////////
// This is the function that uses variadic arguments
//
int usefunc(int option, ...)
{
    // ...
    // ...
    return 0;
}

int main()
{
    int result;

    result = usefunc(0, func); // ** int usefunc(int,...)': cannot convert argument 2 from 'int (__cdecl *)(int)' to '...' **
                               // Context does not allow for disambiguation of overloaded function
    return result;
}    

没有模板 (int func(int size) ) 代码编译正常。我如何修改它以使编译器理解可变参数?

问题是 func 被视为函数指针,但 pointers to template functions are not allowed 在 C++ 中。

引用func时需要指定要使用的类型,如:

result = usefunc(0, func<int>);

你可以使用decltype来引用变量的类型,更灵活一点:

result = usefunc(0, func<decltype(result)>);