luc*_*nte 5 c++ casting constants
是否强制转换const
C++ 中定义的成员函数指针?以下是有效代码吗?
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);
Run Code Online (Sandbox Code Playgroud)
更新:
我需要这个的原因是我正在编写一个函数,它接受一个对象和一个指向该对象的成员函数指针。我需要一个 const 对象的版本(只接受 const 函数)和一个普通的。由于我不想要重复的代码,我的想法是将实际代码放在非常量版本中,并从 const 版本中调用它,丢弃任何常量。
编译器吃掉它。但向后转换更有用。
再说一遍,但是 - 最好不要使用它,const_cast 通常只是一个快速而肮脏的解决方案,只有在没有任何其他解决方案时才应用它。
更新答案
如果我理解正确的话,你将使用一个对象和两个函数。第一个函数接受 const 对象和 const 成员函数,第二个函数接受非 const 对象和非 const 成员函数。
根据给定的信息,您可以更改第二个函数以接受非常量对象和常量成员函数。并给他们一个非常量对象及其常量成员函数。