У меня небольшая проблема, связанная с указателями на перегруженные функции-члены в 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 ++, если это что-то меняет.
Спасибо!