У меня небольшая проблема с указателями на перегруженные функции-члены в C++. Следующий код компилируется нормально:
class Foo {
public:
float X() const;
void X(const float x);
float Y() const;
void Y(const float y);
};
void (Foo::*func)(const float) = &Foo::X;
Но это не компилируется (компилятор жалуется, что перегрузки неоднозначны):
void (Foo::*func)(const float) = (someCondition ? &Foo::X : &Foo::Y);
Предположительно, это связано с тем, что компилятор сортирует возвращаемое значение условного оператора отдельно от типа указателя функции? Я могу обойти это, но мне интересно узнать, как спецификация говорит, что все это должно работать, поскольку это кажется немного неинтуитивным, и есть ли способ обойти это, не возвращаясь к 5 строкам if-then-else .
Я использую MSVC++, если это имеет значение.
Спасибо!