shared_ptr<char>
をshared_ptr<unsigned char>
に変換する良い方法はありますか?std :: shared_ptr <char>をstd :: shared_ptr <unsigned char>に変換する
私は以下を思いついたが、きれいに見えなかった。
int main(int argc, char** argv)
{
std::shared_ptr<char> p1 = std::make_shared<char>();
std::shared_ptr<unsigned char> p2 = std::shared_ptr<unsigned char>(
reinterpret_cast<unsigned char*>(p1.get()),
[p1](unsigned char*) {});
}
私はもともとラムダ捕獲を理解しておらず、バグがあると思っていましたが、それを考えていたとは思いません。実際、これはもっと厄介なようですが、 'reinterpret_pointer_cast'よりも普遍的な解決策です。実際、 'reinterpret_pointer_cast'は悪い考えです。あるレベルの再解釈だけが削除されます。複数レベルのポインタ(例えば、 '*** char')がある場合、それは分解され、より多くの意味論的トリックが必要になる状況を作ります。このようなシナリオでは、ラムダキャプチャをより均一に適用することができます。 – grovkin