C/C++の配列へのポインタは要素へのポインタにて代用される場合が多いです。(int foo[3];
とした時、foo
はint
型へのポインタとなる等。)
しかし、C++の場合、配列の要素数まで含めた型を定義できます。
例えば、typedef int Int3Array[3];
とすれば、Int3Array
はint[3]
型として定義できます。
この時Int3Array*
はint[3]
型へのポインタとなります。
そして、Int3Array* bar=new Int3Array;
としたいのですが、できません。
MinGWの場合、error: cannot convert 'int*' to 'int (*)[3]' in initialization
というエラーになります。
new[]
が呼ばれてしまい、戻り値の型がint
型へのポインタになってしまうのだと思います。
new[]
ではなくnew
を呼ばせる構文はないでしょうか?
【追記】
現在、開発中のライブラリにて配列型のnewをサポートするかどうか検討中です。
そもそもC++にて配列型をnewできないのであればエラー処理する予定です。
しかし、もし、配列型をnewできるのであればサポートしたいと考えています。
【実装しました】
raccyさんご提案のreinterpret_cast<>を使う方法でうまくいきました。私が何か見落として無ければ必要な機能に全て対応できた筈です。また、私に可能な確認とcatsforepawさんのclangでの確認により、使っても大きな問題にはならないだろうと判断しました。
最初にご提案頂いたraccyさんの回答をベスト・アンサーとさせて頂きました。
raccyさん、catsforepawさん、ありがとうございます。
また、epistemeさんもお付き合い、ありがとうございます。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/07 08:04
2016/05/07 08:17
2016/05/07 08:25