[c++]std::make_uniqueを関数の引数に

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

[c++]std::make_uniqueを関数の引数に

#1

投稿記事 by purin52002 » 7年前

こんばんは
最近はue4をいじっていましたが、ようやくc++のコードを書けそうです。

今回の質問ですが、以下のコードをご覧ください。

コード:

class Super ;
class Sub : public Super ;

void Func(std::unique_ptr<Super>&& x) ; //Superクラスのポインタを引数にとる関数

int main()
{
    //error
    //引数の型が合わないと怒られる(unique_ptr<Sub>が作られるから?)
    Func(std::make_unique<Sub>() ) ;
}

上のコードのように、make_uniqueを関数の引数に渡したいのですが、引数の型が合わないと怒られてしまいます。
対策としてunique_ptr<Super>の変数にmake_uniqueの結果を代入し、それを引数に渡しているのですが、できることなら引数にmake_uniqueを渡してしまいたいです。

なにかいい方法はないでしょうか?
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

sleep

Re: [c++]std::make_uniqueを関数の引数に

#2

投稿記事 by sleep » 7年前

purin52002 さんが書きました:

コード:

class Super ;
class Sub : public Super ;

void Func(std::unique_ptr<Super>&& x) ; //Superクラスのポインタを引数にとる関数

int main()
{
    //error
    //引数の型が合わないと怒られる(unique_ptr<Sub>が作られるから?)
    Func(std::make_unique<Sub>() ) ;
}

上のコードのように、make_uniqueを関数の引数に渡したいのですが、引数の型が合わないと怒られてしまいます。

コード:

void Func(std::unique_ptr<Super>& u_ptr);
のように、実際にコンパイルしているコードの仮引数が & ということは無いですか?

lvalue だとエラーが出なくて、rvalue だとエラーが出るというところが不可解です。(エラーが発生しているのは本当にそこですか?どちらも受け取れるはずです)

実際にエラーが出るコンパイル可能な最小限のコードを掲示した方が良いでしょう。

sleep

Re: [c++]std::make_uniqueを関数の引数に

#3

投稿記事 by sleep » 7年前

sleep さんが書きました: lvalue だとエラーが出なくて、rvalue だとエラーが出るというところが不可解です。(エラーが発生しているのは本当にそこですか?どちらも受け取れるはずです)
上記は lvalue が受け取れるなら、の意ですが、
それもおかしな話で、掲示されているコードでは逆に lvalueは 受け取れず、エラーが出るはずなのですが・・・

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: [c++]std::make_uniqueを関数の引数に

#4

投稿記事 by purin52002 » 7年前

すみません、提示コードが間違いです^^;

本当は右辺値ではなく左辺値を受け取る関数です。

私の理解だと、左辺値は実体が作られたもの、右辺値は関数の返り値など直前に作られたものだと思っています。

私が今作っている関数ではどちらの場合でもエラーが出ないようにしたいと思っています。


、、、ここまで書いて気づいてしまったのですが、左辺値を引数にする関数と右辺値を引数にする関数を作ってオーバーロードすれば解決ですかね?
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: [c++]std::make_uniqueを関数の引数に

#5

投稿記事 by purin52002 » 7年前

お騒がせして申し訳ありません<(__)>

オーバーロードでおそらく解決しました^^;
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

返信

“C言語何でも質問掲示板” へ戻る