其他分享
首页 > 其他分享> > c – std :: function中带有静态函数的“未解析的重载函数类型”

c – std :: function中带有静态函数的“未解析的重载函数类型”

作者:互联网

尝试将重载的静态函数传递给std :: function时,我收到“未解析的重载函数类型”错误.

我知道类似的问题,例如thisthis.但是,即使答案有用于将正确函数的地址转换为函数指针,它们也会失败并使用std :: function.这是我的MWE:

#include <string>
#include <iostream>
#include <functional>

struct ClassA {
  static std::string DoCompress(const std::string& s) { return s; }
  static std::string DoCompress(const char* c, size_t s) { return std::string(c, s); }
};

void hello(std::function<std::string(const char*, size_t)> f) {
  std::string h = "hello";
  std::cout << f(h.data(), h.size()) << std::endl;
}

int main(int argc, char* argv[]) {
  std::string (*fff) (const char*, size_t) = &ClassA::DoCompress;
  hello(fff);
  hello(static_cast<std::string(const char*, size_t)>(&ClassA::DoCompress));
}

有人可以解释为什么static_cast在隐式的时候不起作用?

解决方法:

您无法转换为函数类型.你可能想要转换为指针类型:

hello(static_cast<std::string(*)(const char*, size_t)>(&ClassA::DoCompress));
//                           ^^^

标签:std-function,c,c11,function-pointers
来源: https://codeday.me/bug/20190829/1762396.html