将 const 成员函数转换为非常量

luc*_*nte 5 c++ casting constants

是否强制转换constC++ 中定义的成员函数指针?以下是有效代码吗?

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 版本中调用它,丢弃任何常量。

klm*_*123 3

编译器吃掉它。但向后转换更有用。

再说一遍,但是 - 最好不要使用它,const_cast 通常只是一个快速而肮脏的解决方案,只有在没有任何其他解决方案时才应用它。

更新答案

如果我理解正确的话,你将使用一个对象和两个函数。第一个函数接受 const 对象和 const 成员函数,第二个函数接受非 const 对象和非 const 成员函数。

根据给定的信息,您可以更改第二个函数以接受非常量对象和常量成员函数。并给他们一个非常量对象及其常量成员函数。