構造体や共用体を関数に渡すときに,その場で定義して渡したいのですが,構造体のフィールド名をもとに初期化する方法はありますでしょうか.
C++(Arduinoでの使用,おそらくC++11)を想定しています.
Cでも可能なのでしょうか…?
C#だとできるのですが…
イメージとしてはこんな感じです
よろしくお願いします.
構造体でやりたいこと↓
C++
1typedef struct{ 2 int hoge; 3 int fuga; 4} st_test; 5 6void testfunc(st_test a){ 7 //受けとったaをなんやかんやする 8} 9 10//これは問題なくできるが,値とフィールドの関連性がわかりづらい 11testfunc(st_test{0x01, 0x02}); 12 13//こんな風に書きたい.これならhogeが0x01なのが一目瞭然 14testfunc(st_test{hoge = 0x01, fuga = 0x02}); 15 16//C#だとこのように書ける(構造体の宣言時にhogeやfugaをpublicに指定する必要はあるが) 17testfunc(new st_test(){hoge = 0x01, fuga = 0x02}); 18
共用体でやりたいこと↓
C++
1 2typedef union{ 3 uint8_t hoge; 4 struct{ 5 uint8_t b0:1; 6 uint8_t b1:1; 7 //中略 8 uint8_t b7:1; 9 }; 10} un_test; 11 12testfunc2(un_test a){ 13 //略 14} 15 16//これは問題なくできるが 17testfunc2(un_test{0x80}); 18 19//できればこんな風に書きたい 20testfunc2(un_test{b0 = 1, b1 = 0, ..中略.. , b7 = 0}); 21 22 23
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/11 13:45
2020/02/11 14:21 編集