强制转换成员函数指针时,如何选择const版本的重载?
获取const重载成员函数指针的方法
要获取const版本的foo成员函数指针,只需把const关键字放在成员函数指针类型的参数列表之后,对应的类型为void (Overloads::*)() const。
正确代码示例
修改你的main函数如下:
int main() { auto overloads = Overloads{}; // 获取非const版本的foo指针 auto foo_func = static_cast<void (Overloads::*)()>(&Overloads::foo); (overloads.*foo_func)(); // 输出foo // 获取const版本的foo指针 auto const_foo_func = static_cast<void (Overloads::*)() const>(&Overloads::foo); (overloads.*const_foo_func)(); // 输出const foo // 也可使用const对象调用const版本函数指针 const auto const_overloads = Overloads{}; (const_overloads.*const_foo_func)(); // 同样输出const foo }
语法位置的原因
在C++中,const放在成员函数参数列表后,是用来标记该函数为const成员函数——它承诺不会修改类的非mutable成员变量,调用时对象会被视为const类型。对应的成员函数指针类型里,const的位置必须和函数定义一致,编译器才能准确匹配到const版本的重载。
内容的提问来源于stack exchange,提问作者Георгий Гуминов
相关产品推荐
相关产品推荐

