不接受可变参数模板函数参数

问题描述 投票:0回答:1

以下代码将无法构建,任何有关原因的反馈将不胜感激。

void bar(std::string str, int& a, int& b)
{
}

template<typename T, typename ... Args>
void foo(std::function<void(T, Args...)> fcn, Args ... args)
{
    // Some code that calls fcn
}

void run()
{
    int a = 3;
    int b = 5;
    foo<std::string, int&, int&>(bar, a, b);
}

这是这个SO答案中提出的第一个解决方案的修改实现。

IDE 在调用

foo
的行上给出以下错误:

C++ 模板 void foo(std::function fcn, Args ...args)

没有函数模板“foo”的实例与参数列表匹配
参数类型有:
(void (std::string str, int &a, int &b), int, int)

单独测试,似乎通过模板参数传递

fcn
参数没问题。问题似乎在于传递一个函数参数,该函数可以接受可变参数模板参数。

c++ templates c++17 variadic-templates
1个回答
0
投票

函数(指针)不是

std::function
,所以不能用于推导。

您可能会在这种情况下使

Ts...
不可推论

template<typename T, typename ... Args>
void foo(std::function<void(T, std::type_identity_t<Args>...)> fcn, Args ... args)
{
    // Some code that calls fcn
}

演示

© www.soinside.com 2019 - 2024. All rights reserved.