是否强制转换 C++ 中定义的成员函数指针的 const
性?以下代码是否有效?
struct T {
void foo(int i) const { std::cout << i << std::endl;};
};
void (T::*f1)(int) const = &T::foo;
void (T::*f2)(int) = reinterpret_cast<void (T::*)(int)>(f1);
T t;
(t.*f2)(1);
更新:
我需要这个的原因是我正在编写一个函数,它接受一个对象和一个指向该对象的成员函数指针。我需要一个 const 对象的版本(只接受 const 函数)和一个普通的。由于我不想要重复的代码,我的想法是将实际代码放在非 const 版本中并从 const 版本调用它,丢弃任何 const。
最佳答案
编译器吃掉它。 但是向后转换更有用。
再说一次,但最好不要使用它,const_cast 通常只是一个快速而肮脏的解决方案,只有在没有任何其他解决方案时才应用它。
更新答案
如果我对您的理解正确,您将使用一个对象和两个函数。第一个函数接受 const 对象和 const 成员函数,第二个 - 非常量对象和非常量成员函数。
根据给定的信息,您可以更改第二个函数以接受非常量对象和常量成员函数。并给他们一个非常量对象及其常量成员函数。
关于c++ - 将 const 成员函数转换为非常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914845/