Я получаю сообщение об ошибке «неразрешенный тип перегруженной функции» при попытке передать перегруженную статическую функцию в std::function
.
Мне известны похожие вопросы, такие как это и это. Однако, несмотря на то, что ответы там работают для получения адреса правильной функции в указатель функции, они терпят неудачу с 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
не работает, когда работает неявный?
reinterpret_cast<>
. - person πάντα ῥεῖ   schedule 28.10.2015reinterpret_cast
не сработало. Знание того, в чем была моя ошибка, конечно, делает очевидным, почему. :) - person David Nemeskey   schedule 28.10.2015