C++相談室 part166 (607レス)
1-

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
578: (ワッチョイ 5b85-ZBQJ) 08/22(金)08:55 ID:LQncxxKI0(1) AAS
複数返したいならタプルでいいんじゃない
引数に出力渡すのが多いと思うけど
579
(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ 5932-86vp) 08/22(金)10:34 ID:s1oN92u00(1/3) AAS
Python でも返却値として複数の値を返すことは出来ない。
Python で return にカンマ区切りで複数の式を書くとタプルになってる。
受け取る側で複数の変数を書いておけばタプルが分配 (unpack) されたりはするけど……
関数が返却しているのはあくまでもひとつの値という理屈。

複数の値 (いわゆる多値) を関数が返せる言語はそれほど多くない。
LISP 系は多値のサポートがあることが多いけどそれ以外だと Go くらいじゃないかな?
(マイナー言語だとわからんけどよく知られている主要な言語にはほとんどないと思う。)

シンタクス的には C++ で return にカンマ区切りで複数の値を渡そうとしたとき、
つまり
return 1, 2, 3;
省8
580
(2): (ワッチョイ d1d6-uNzz) 08/22(金)10:49 ID:hiXhYkKD0(1/2) AAS
>>579
受け取る方はどうやって受ければいいのですか?

私の頭だと構造体で返せばいいかな なんつて
581: (ブーイモ MMb3-Srv/) 08/22(金)11:06 ID:HM+/3rtsM(1) AAS
>>580
構造化束縛で取り出すのが楽
構造体を定義する手間が気にならないならそれでもいい
582: (スププ Sdb3-im2P) 08/22(金)11:49 ID:ZeYv0pFNd(1) AAS
C++も昔に比べれば随分と楽になった
583: はちみつ餃子◆8X2XSCHEME (ワッチョイ 5932-86vp) 08/22(金)12:07 ID:s1oN92u00(2/3) AAS
>>580
タプルは単にタプル型の値なので普通に受け取れる。

auto bar = foo();

といったように書ける。
タプルから要素を取り出すのは std::get<0>(bar); といった要領になる。
受け取るときに変数に分配するやり方もあって

atuo [r1, r2, r3] = foo();

というようにも書ける。
これを構造化束縛という。
おそらくこれが期待していたものなんじゃないか?
省1
584: はちみつ餃子◆8X2XSCHEME (ワッチョイ 5932-86vp) 08/22(金)12:23 ID:s1oN92u00(3/3) AAS
もし使っているコンパイラが MSVC なら MSVC のデフォルトでは C++14 になってるはずだからそのままだと構造化束縛を使えないかも。
(構造化束縛は C++17 から。)
私は MSVC を利用していないから具体的なやり方は知らんけど必要なら適当に設定してね。
585: (ワッチョイ d1d6-uNzz) 08/22(金)17:49 ID:hiXhYkKD0(2/2) AAS
どもです。構造化束縛ね。なんか聞いた事あるかなという程度だった。
使うかなぁ・・・
586: (ワッチョイ c1ad-F95I) 08/22(金)21:41 ID:NcnZjMQ+0(1/2) AAS
構造体ほど強いまとまりではなく、返り値だけのゆるいまとまりなら構造化束縛の方が便利だけどねぇ
587
(1): (ワッチョイ d38d-PSkW) 08/22(金)21:41 ID:iDw/vpGA0(2/3) AAS
>>579
std::tuple<int, float, long> foo(void) { return {1, 2.1, 99}; }
atuo [r1, r2, r3] = foo();
って書いたら、
r1に1が、r2に2.1が入るの?
まあそれでもいいかな

PythonからC++に移植中で、ちょっと読みづらいと思ったので…
588: (ワッチョイ d38d-PSkW) 08/22(金)21:45 ID:iDw/vpGA0(3/3) AAS
>>587
まあでも、なんで複数returnにしないのかね?
outの引数が多すぎだわ
589: (ワッチョイ c1ad-F95I) 08/22(金)22:11 ID:NcnZjMQ+0(2/2) AAS
Python でも複数return ってできないと思うけど?
カンマ演算子でタプルを作って返してるだけでしょ
590
(1): (ワッチョイ 51a5-VfJp) 08/22(金)23:03 ID:5NhjtIih0(1) AAS
そうやね。Pytnonのカンマは、言語仕様上は演算子とは一応区別されているみたいだけど、感覚的には演算子だよね。何で演算子ではないんだろうというのはちょっとした疑問だけど(1, みたいなのを後置演算子と呼ぶのはちょっと変とかそういうことかな?)
591
(1): (ワッチョイ d1d6-uNzz) 08/23(土)01:30 ID:ynkOCuVA0(1) AAS
//こんな感じ?
#include <iostream>
#include <tuple>
using namespace std;
tuple<int, float, long> foo() {
return {1, 2.1, 99};
}
int main(){
auto [r1, r2, r3] = foo();
cout<<r1<<endl;
省4
592
(1): (ワッチョイ 7101-Im4V) 08/23(土)01:57 ID:HIKpDy1T0(1/2) AAS
構造化束縛を調べてみたら
fooの返り値はtupleでなくてもpairで返しても良さそうなんだけど
どういうルールなの? キモい
593
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 5932-oZZu) 08/23(土)02:11 ID:CHT0FIec0(1/2) AAS
>>592
それがタプルライクの概念。
std::tuple_size の特殊化など、いくつかのインターフェイスを実装すればタプルと同じように扱ってくれる仕組み。

それとは別に配列の場合とか、全てのデータメンバが公開直接メンバなクラスもありということになってるのは単純に箇条書きで数種類のパターンを示す形になってる。
それほどパターンが多くはないがひとつの原則で表せるわけでもない。
594: (ワッチョイ 7101-Im4V) 08/23(土)02:22 ID:HIKpDy1T0(2/2) AAS
>>593
>それほどパターンが多くはないがひとつの原則で表せるわけでもない。
キメぇよw
595: (ワッチョイ 2b10-fgJ7) 08/23(土)09:17 ID:rBYkDYvT0(1) AAS
構造的部分型とか静的ダックタイピングって呼ばれるやつ?
596
(1): (ワッチョイ d326-PSkW) 08/23(土)13:12 ID:wVRYzYK20(1) AAS
>>591
int r1;
float r2;
long r3

r1, r2, r3 = foo();

って書きたいですね。Pythonみたく
597: はちみつ餃子◆8X2XSCHEME (ワッチョイ 51e2-oZZu) 08/23(土)13:15 ID:DefMPT1k0(1) AAS
代入のときは tie を使う。
598: (ワッチョイ c9bc-zJwz) 08/23(土)15:01 ID:p3yrvAiP0(1) AAS
テンプレートの黒魔術で脳汁出てからが本番
599: (ワッチョイ 5be0-Srv/) 08/23(土)15:37 ID:T+HzfXMC0(1) AAS
>>596
別の言語っぽくって考えは捨てた方が身のため
600: (ワッチョイ 9379-XJDV) 08/23(土)19:08 ID:VwZegIlc0(1) AAS
666!
601
(1): (スフッ Sdb3-im2P) 08/23(土)19:56 ID:k0uySdFmd(1) AAS
struct {
int r1,
float r2,
long r3
} t;
t = foo();
って描きたい
struct に tuple からのコンストラクタを実装すれば良いのかな
602: はちみつ餃子◆8X2XSCHEME (ワッチョイ 5932-86vp) 08/23(土)20:18 ID:CHT0FIec0(2/2) AAS
>>601
最初から foo がその型で返せばいいんでないの?
603: (ワッチョイ 6dad-W0Wb) 08/24(日)12:07 ID:HqphwiLf0(1) AAS
C言語から続くカンマ演算子が分かってないんでは?
604: (ワッチョイ fee0-ea+o) 08/24(日)12:09 ID:gU3L8vdd0(1) AAS
Pythonあがりだから型を定義する意味がわかってないんだと思う
605: (ワッチョイ 15d6-VoZ8) 08/25(月)07:55 ID:O202BBJ90(1) AAS
a=10
a=’hello'
翻訳しながらだからできるんだろうけどね。
606: (ワッチョイ 86cf-tcs3) 08/25(月)08:19 ID:X23BjBGY0(1) AAS
>590
左辺にも現れるからじゃね?
607: 初心者プログラマー (ワッチョイ d5ce-rKTE) 08/28(木)17:50 ID:GULY1B8W0(1) AAS
cppでbazelでmediapipeのビルド方法を教えてくれる方はいませんか?

自分の環境

Visual Studio Community 2022
Windows11  64 ビット
scoopでbazel 5.3.0
Python 3.10.0
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.016s