将可变参数解析为函数指针
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)>);
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)>);