reinterpret_cast
を使用して、同じクラスの別のポインタへのメンバ関数にメンバ関数へのポインタをキャストすることは合理的ですか?次の例は動作します。しかしそれは合法ですか? [expr.reinterpret.cast] C++ドラフト状態で同じクラスの別のものに1つのポインタ関数へのキャスト
#include<iostream>
#include<vector>
#include<string>
class A
{
public:
void func_int(int x) { std::cout << x << std::endl; }
void func_string(std::string const& x) { std::cout << x << std::endl; }
};
int main()
{
std::vector<void(A::*)()> v;
v.push_back(reinterpret_cast<void(A::*)()>(&A::func_int));
v.push_back(reinterpret_cast<void(A::*)()>(&A::func_string));
A a;
(a.*reinterpret_cast<void(A::*)(int)>(v[0]))(5);
(a.*reinterpret_cast<void(A::*)(std::string const&)>(v[1]))(std::string{"Test"});
return 0;
}