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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: [c++]std::make_uniqueを関数の引数に

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

#5

by purin52002 » 6年前

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

オーバーロードでおそらく解決しました^^;

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

#4

by purin52002 » 6年前

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

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

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

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


、、、ここまで書いて気づいてしまったのですが、左辺値を引数にする関数と右辺値を引数にする関数を作ってオーバーロードすれば解決ですかね?

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

#3

by sleep » 6年前

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

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

#2

by sleep » 6年前

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 だとエラーが出るというところが不可解です。(エラーが発生しているのは本当にそこですか?どちらも受け取れるはずです)

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

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

#1

by purin52002 » 6年前

こんばんは
最近は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を渡してしまいたいです。

なにかいい方法はないでしょうか?

ページトップ