【发布时间】:2019-01-06 19:15:48
【问题描述】:
我正在尝试使用std::invoke 调用模板化成员函数,如下面的代码所示。
#include <functional>
#include <iostream>
struct Node
{
template <typename T>
T eval(T lhs, T rhs) { return lhs + rhs; }
};
int main(void)
{
std::cout << std::invoke(&Node::eval<int>, 1, 2);
return 0;
}
gcc 8.1 给了我错误
没有匹配的函数调用'invoke(未解决的重载 函数类型, int, int)'
我认为这意味着函数模板实际上并未实例化。
为了使通话成为可能,我缺少什么?
【问题讨论】:
-
eval需要一个Node对象来操作。 -
您可以将
eval标记为static,这样就可以解决问题。正如@MilesBudnek 上面所说 - 需要在Node对象上调用eval。 -
@Lorand No, there's no error if you make
evalstatic.
标签: c++ function-pointers c++17 member-function-pointers