【发布时间】:2021-04-09 11:20:33
【问题描述】:
我正在尝试将std::invoke() 与重载函数一起使用:
#include <iostream>
#include <functional>
struct S {
void foo(int) { }
void foo(int, int) { }
};
int main()
{
S s;
std::invoke(&S::foo, s, 1);
}
但我收到一个错误:'std::invoke': no matching overloaded function found。当只有一个名称为foo() 的函数时,它工作正常。函数重载时是否可以使用std::invoke()?
【问题讨论】:
-
您可以通过强制转换帮助编译器选择合适的重载:
static_cast<void (S::*)(int)>(&S::foo) -
谢谢,帮了大忙!
-
您还可以通过将调用包装在 lambda 中来消除问题。
std::invoke([&]() { s.foo(1); }). -
@super 谢谢,你的解决方案也有效!
标签: c++ c++17 overloading std-invoke