"unresolved overloaded function type" 在 std::function 中具有静态函数
"unresolved overloaded function type" with static function in std::function
我在尝试将重载的静态函数传递给 std::function
时遇到 "unresolved overloaded function type" 错误。
我知道类似的问题,比如this and this。然而,即使那里的答案可以将正确函数的地址获取到函数指针中,它们也会以 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
时遇到 "unresolved overloaded function type" 错误。
我知道类似的问题,比如this and this。然而,即使那里的答案可以将正确函数的地址获取到函数指针中,它们也会以 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));
// ^^^