gpt4 book ai didi

c++ - "unresolved overloaded function type"在 std::function 中有静态函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:30 26 4
gpt4 key购买 nike

尝试将重载静态函数传递给 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));
// ^^^

关于c++ - "unresolved overloaded function type"在 std::function 中有静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33389040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com