【问题标题】:Using std::invoke when a function is overloaded函数重载时使用 std::invoke
【发布时间】: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&lt;void (S::*)(int)&gt;(&amp;S::foo)
  • 谢谢,帮了大忙!
  • 您还可以通过将调用包装在 lambda 中来消除问题。 std::invoke([&amp;]() { s.foo(1); }).
  • @super 谢谢,你的解决方案也有效!

标签: c++ c++17 overloading std-invoke


【解决方案1】:

有两个示例解决方案:

std::invoke(static_cast<void(S::*)(int)>(&S::foo), s, 1);
std::invoke([&s]() { s.foo(1); });

【讨论】:

  • 你为什么要把1转换成int
猜你喜欢
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2015-07-18
  • 2014-09-12
相关资源
最近更新 更多