Вот некоторый класс с двумя перегруженными методами foo:
class Object {
public:
Object (double someVal) : val(someVal) { }
double getter () const { return val; }
double& getter () { return val; }
private:
double val;
};
Так что теперь функция double Object::getter() const
будет вызываться на экземплярах const
const Object instance(42);
cout << instance.getter() << endl; // called: `double getter() const`
Теперь я пытаюсьполучить ссылку на double getter() const
функцию и присвоить ее std::function
type
const Object instance(42);
function<double(const Object&)> foo = &Object::getter;
cout << foo(instance) << endl;
Код работает нормально, если функция double& getter()
удалена, но с ней я получил следующую ошибку во второй строке:
test.cpp:18:34: error: no viable conversion from '<overloaded function type>' to
'function<double (const Object &)>'
function<double(const Object&)> foo = &Object::getter;
^ ~~~~~~~~~~~~~~~
Кажется, что ошибка происходит, потому что система пытается вызвать double& getter()
. Вопрос в том, как заставить вызывать double getter() const
? Полный список прилагается здесь