我在处理指向 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++,如果这有什么不同的话。
谢谢!