メンバへのポインタへのアクセスに使用されるポインタが正しい型である限り、次のことは未定義の動作につながりますか?派生クラスへのポインタメンバ変数をポインタベースのクラスメンバ変数にキャストするのは合法でしょうか?
もしそうなら、なぜキャストが必要なのですか?それがなければもっと良く見えます(そして、はい、それは単なる意見の問題です)。
struct base {
int foo(int base::* ptr) {
return this->*ptr;
}
};
struct sub : base {
int blah{ 42 };
};
int main() {
return sub{}.foo(static_cast<int base::*>(&sub::blah));
}
ここでは正式なのか分かりませんが、大変**安全です**。あなたは 'int'メンバを持たないオブジェクトに対して' foo'を呼び出すことができます。それを行う。別の言い方をすれば、正式なUBではないことを知っていれば、本当の問題を助長しません。タイプは安全ではないので、UBかどうかは言語弁護士の質問以外では無関係です(しかし、興味のあるものとしてタグ付けすることを検討してください)。この方法で解決しようとしている問題は何ですか? –
私はまだ問題を解決しようとはしていません。私は最近、それを広範囲に使用するいくつかのコードを使って作業を始めました。パターンはまったくうまく座りません。 – evan