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);
おそらくこれは、コンパイラが条件演算子の戻り値を関数ポインタ型とは別に分類することに関係しているのでしょうか? 私はそれを回避することができますが、仕様がどのように機能することになっているのかを知りたいと思っています。 .
それが違いを生む場合、私はMSVC ++を使用しています。
ありがとう!