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

502: (ワッチョイ 8e1a-9Qg/) 06/30(月)19:44 ID:etdu4EFd0(1) AAS
長い名前空間の扱いの質問なのですが、
例えばA::B::C::DみたいなクラスD内でP::Q::R::SのようなクラスSを使用していて
ヘッダーファイルが
namespace A::B::C {
public class D {
 void foo(P::Q::R::S& s);
};
}
みたいな感じになるのですが、実際にはこのP::Q::R::Sが非常に長く正直見苦しいです
かといってusingをヘッダー内で使うのは良くないですよね?
省1
503: (ワッチョイ e794-iZCu) 06/30(月)20:47 ID:CUK0Fuvn0(1) AAS
namespace pqrs = P::Q::R::S
でいいんじゃない?
504
(1): (ワッチョイ 7b7c-9nZq) 07/01(火)21:41 ID:W7Fp4vWi0(1) AAS
Sしか使わないならusing P::Q::R::S;
505: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7b32-0lSL) 07/01(火)22:22 ID:kHEih0Y20(1) AAS
>>504
using P::Q::R::S; したらもしも using namespace A::B::C; したときに P::Q::R::S も探索対象になってしまう。
使う側に余計な影響を与えないようにするには別名をつけるほうがより良い。
506
(1): (ワッチョイ 3641-ctb7) 07/03(木)00:24 ID:ye5zZInN0(1) AAS
エンベデッド分野は今でもC/C++が主流なの?
AIに任せられない分野だから生きのこれそうで気になっておりまする
507: (アウアウウー Sabb-H9/A) 07/03(木)09:26 ID:q23h/8z8a(1) AAS
良いんじゃね
508
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 4730-0lSL) 07/03(木)11:06 ID:4Hn86Ej50(1) AAS
>>506
組み込みシステムも多様なので性質や規模によるでしょ。
リアルタイム性が重要なところでは C/C++ は主流のままだと思うけど、プロジェクト全体が C/C++ だけで構成されることは少なくなるんじゃない?
509
(2): (ワッチョイ 420e-vr7j) 07/03(木)11:57 ID:0Ka09OV10(1) AAS
リアルタイム性はOSがやることだし
言語関係ないよ
510: (ワッチョイ e79a-0q56) 07/03(木)12:22 ID:dQk6sKVB0(1) AAS
Javaや.NETはGCでストップ・ザ・ワールドが発生するからリアルタイムに弱いらしい
最近は目標停止時間を1ms以下に抑えるGCもあるけど、あくまでも目標であって保証ではないからね
511
(1): (ワッチョイ 4e5f-nkZs) 07/03(木)15:27 ID:d0nwmVKl0(1) AAS
>>509
イベントスレッドでIOされてもOSがなんとかすると思ってんの?
512
(1): (アウアウウー Sabb-H9/A) 07/04(金)08:50 ID:fF3rQ1JLa(1) AAS
組み込み
リアルタイムOS
これほど曖昧な言い回しは他に無い
513: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7b32-0lSL) 07/04(金)10:17 ID:wZ441BSd0(1) AAS
>>509
リアルタイム性が重要なところというのはまさにそのリアルタイム OS のことで、それらを書くのに C/C++ が主流という話なんやで。
そんで既存の OS を使う場合でも次にアプリケーションを用意すれば動くというわけではなくて、組み込みシステムなら大抵の場合にデバイスドライバも書かなければいけないし、 OS が面倒みてくれる範囲は小さい。

低レイヤの整備がすでに整っている状況ならアプリケーションはもうちょっと言語の選択肢はあるかもね。
514: (ワッチョイ a332-vr7j) 07/04(金)10:58 ID:8a61AjkK0(1/2) AAS
リアルタイムOSでないOSで、リアルタイム性重視ならそうだが
リアルタイムOSで作るなら言語は何でもいい
515: (ワッチョイ a332-vr7j) 07/04(金)10:59 ID:8a61AjkK0(2/2) AAS
例えば24時間365日止まってはいけない産業用制御なんて
C++でも何でもない
516: (ワッチョイ 6fd6-sHGY) 07/04(金)11:09 ID:7dTC+3QP0(1) AAS
シェルで済むならシェルにしなさい。(UNIX)
517: (ワッチョイ 4ef9-nkZs) 07/04(金)11:13 ID:lC93JhvQ0(1/2) AAS
言語なんでもいいって?
リアルタイムOSってそもそも言語の選択肢少ねーだろ
518: (ワッチョイ 4ef9-nkZs) 07/04(金)11:19 ID:lC93JhvQ0(2/2) AAS
>>512
いうほどあいまいか?
せいぜい中身がLinux、Windowsでアプリのインストールも自由みたいなやつだけだろ
519: (ワッチョイ 06a1-6mIp) 07/04(金)20:28 ID:wNUogzY00(1/2) AAS
>>511
ちょっI/Oしたらやっぱリアルタイム性に影響出るの?!
んまー秒単位でwaitして帰ってこないみたいな極端なI/Oポートがあったらそうかもしれないが
520: (ワッチョイ 06a1-6mIp) 07/04(金)20:39 ID:wNUogzY00(2/2) AAS
>24時間365日止まってはいけない産業用制御
冗長構成かフェイルオーバーするような枠組みとしての取り組みが第一優先な希ガス……
ソフトウェアーの冪等性により同じバグが同じタイミングで発生して冗長構成が無意味化するする危険性については
十分テストしてバグを撮ったのちに起動タイミングをずらすなどの工夫を行えばポアソン分布の同時確率か何かに従って無視できうる(と思う
さすがに原子炉の制御とかだとプロセス単体も形式検証して他分野よりもっと十分検証するらしい(間接伝聞
521
(1): (ワッチョイ eb86-SoaL) 07/05(土)12:14 ID:JEWbe+UQ0(1) AAS
そんなレベルはラダー図で書くやろ
522: (ブーイモ MM8e-nkZs) 07/05(土)12:31 ID:yj3snSzGM(1) AAS
というかリアルタイムOSの話から関係ない24/365システムの話を出すあたりよくわかってないことを雰囲気で話すタイプの人でしょ
523: (ワッチョイ af77-vr7j) 07/05(土)20:19 ID:iY4IPiMb0(1) AAS
>>521
C++ではないわな
524: (ワッチョイ ffa1-BzvG) 07/06(日)06:14 ID:B20RUTJT0(1/9) AAS
質問なのですが
ケースA) std::stringstream ist("A B"); char c1, c2, c3; に対し、ist >> c1; ist >> c2; ist >> c3; とすると
ist >> c2 は正常に読めて、ist >> c3 を実施した時点で!ist.good()かつist.eof() となってgetc()と類似のEOF検知挙動なのですが
(ちなみに読み取った文字は c1='A'、c2='B'。c3の読み取りは行われない

ケースB) std::stringstream ist("A B"); std::string s1, s2, s3; に対し、ist >> s1; ist >> s2; ist >> s3; とすると
ist >> s2 を実施した時点で早々に!ist.good()かつist.eof() となって挙動が相違し
(ちなみに読み取った文字列は s1="A"、s2="B"。s3の読み取りは行われない

ケースC) しかしBの後に空白を追加してstd::stringstream ist("A B "); とすると、
ist >> s2 は正常に読めて、ist >> s3 を実施した時点で!ist.good()かつist.eof() となってgetc()と類似のEOF検知挙動になる
(ちなみに読み取った文字列は s1="A"、s2="B"。s3の読み取りは行われない
省3
525: (ワッチョイ ffa1-BzvG) 07/06(日)06:16 ID:B20RUTJT0(2/9) AAS
確認用サンプルコード:
外部リンク:ideone.com
526: (ワッチョイ ffa1-BzvG) 07/06(日)06:47 ID:B20RUTJT0(3/9) AAS
とりま上のコードからフォークしたソースコード
外部リンク:ideone.com

 parse_as_string_with_common_logic(std::istream& is, std::string& s, bool& bErr)
みたいな判定処理にしたらケースB、Cを共通に扱えるような印象
なのですが正しくはどうすればよいかわからん……
527
(1): (ワッチョイ 17a6-aNVA) 07/06(日)07:26 ID:oIAQiRlj0(1) AAS
一般的な話ならchar以外の>>で一貫した挙動を期待するのに無理がある
期待した文字が来なかったらungetするかどうか?ファイル最後の改行をどうするか?シグナルが来たら?とか色々あるし
ケースBで言えば"B"の後に文字が続いていればs2に含まないといけないのだから内部的にはケースAで言えばc3まで試し済みの状態
EOFフラグを見るのではなく例外で受け取ったほうが確実
528
(1): (アウアウウー Sa9b-zcFv) 07/06(日)10:18 ID:RFZXbMVga(1/2) AAS
ケースB、Cを共通に扱える
ist.eof()でいいやん
Bが一回余分にループするのは気持ち悪いけど
気にしたら負け
529
(2): (ワッチョイ 1f7f-Wka8) 07/06(日)10:53 ID:14zTNASB0(1) AAS
普通はoperator bool(または fail())を使う
530: (ワッチョイ ffa1-BzvG) 07/06(日)10:56 ID:B20RUTJT0(4/9) AAS
>>527
だいたいわかりた
 is >> s
ライブラリの「>>」の仕様的にsが任意のクラスで有り得るから、
例えばsが複素数クラスで2つの要素を読み取るブツなのに対し要素を1つだけ読み取れなかった場合、
みたいなのが生じ得るがis.eof()ではそこまで表現できない故にライブラリ側では
char以外の一般のケースについて責任を持たないというと理解すた、
従って、test_parse_as_string_with_common_logic(const char* szInput, bool& bErr)を
charの読み取りによってeof()判定するように直したわ
これならiostreamの正当な使い方だけで構成されておりかつ目的を果たせているはず……
省1
531: (ワッチョイ ffa1-BzvG) 07/06(日)11:00 ID:B20RUTJT0(5/9) AAS
>>528
>Bが一回余分にループするのは気持ち悪いけど
いきなりis >> s してその直後のeof()を当てにするロジックである限り、
リンク先のケースBの挙動となり、最後の要素に引き続く空白文字がないとき
最後の要素が入力ストリームにあるのに受け取れないというもっと深刻な事態となる以下略

>>529
operator boolはis.good()と同じはず……
なおかつそれ単独では(is >> sのsがchar以外のとき)ケースBの解決になんね
1-
あと 86 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.030s