unique_ptrの醜さを隠すための次の「トリック」の何が問題になっていますか?
class Drawable;
typedef unique_ptr<Drawable> pDrawable;
#define newDrawable(...) pDrawable(new Drawable (##__VA_ARGS__))
最初の2つは問題ありません。しかし、3つ目は、VS2012でエラーを引き起こしています。
23 IntelliSense: "std::unique_ptr<_Ty, _Dx>::unique_ptr(const std::unique_ptr<_Ty, _Dx>::
_Myt &) [with _Ty=Drawable, _Dx=std::default_delete<Drawable>]" (declared at line 1447 of
"C:\vs2012\VC\include\memory") is inaccessible file.h 36 26
C ++定義マクロがどのように機能するかを誤解しない限り、これが機能しない理由はわかりません。私はそれが単にこのコードを置き換えるだろうと思いました:
newDrawable(a, b, c)
と
unique_ptr<Drawable>(new Drawable(a, b, c));
unique_ptrをコピーできないことは理解していますが、ここではコピーしていません。私ですか?
編集:
問題のマクロの「使用」に関するいくつかのリクエストを受け取りました。
私がそれを使用する場合、それは次のように使用されます:
pDrawable myDraw = newDrawable();
私が翻訳したいのは:
unique_ptr<Drawable> myDraw = unique_ptr<Drawable>(new Drawable());
ただし、Visual Studioで以下のエラーが発生しない限り、マクロをコンパイルすることはできません。それ自体、#defineの何かが許されないかのようです。エラーは、defineを呼び出した場所ではなく、defineを作成した行に返されます。
make_uniqueが機能しない理由についてはこちらをご覧ください:make_uniqueはコンパイルされません
edit2
以下の質問に答えました。上記のコードはコンパイルされ、機能します。