【C++】template 統合スレ -- Part4

このエントリーをはてなブックマークに追加
>>932
std::string(NULL) 見た目で最も「stringでNULLを扱う」にマッチする。これ最狂。
>>940
その手もアリだが、個人的にはお勧めしない。エラーチェックのコードが
そこら中に散らばって煩雑になりがちだから。
頭の悪いやつは書き込むな
結局stringでNULLを扱うの意味は決定してるのか?
>>940
典型的なセキュリティホールの生成過程
947932:04/08/02 00:12
こんなレスあって感動した、、よくやった。(TωT)ウルウル

std::vector<std::string> &array
array.push_back(strtok(NULL, " "));
とした時NULLが入ってきてエラーになってしまうんです、、

単純に
char ch = NULL;
array.push_back(ch);
ということはできないんですよね?


>>942
ひぎぃっ!

>>945
んなもん、誰も判らんわ。
>>947
> std::vector<std::string> &array
> array.push_back(strtok(NULL, " "));
> とした時NULLが入ってきてエラーになってしまうんです、、

strtokなんて標準C規格の癌みたいな関数使うなYO!

> char ch = NULL;
変数がポインタじゃありませんが?
>>947
> char ch = NULL;
おい待て。そもそも NULL は「何も指してないポインタ」のことで、文字列の
終端は '\0' だぞ。

C++ だと様々な都合から、大抵の処理系で #define NULL 0 されてるから
うっかり char ch = NULL; もコンパイル通るが、意味的にはコンパイルエラーに
されても文句言えん。
>>947
そんなもん、NULLかどうかpush_backの前にチェックしろよ。
932はCからお勉強しなおしなさいってことでFA?
そのまえに日本語勉強しろって事でFA
C++ では普通は strtok って使わないの?
955932:04/08/02 00:20
典型的なVBプログラマにはきついって事でFAです。はい。(。´Д⊂)
>>954
Cでも使わないよ。バグってるんだもん。
A,B,,Dみたいなレコードがうまく拾えなかったり。
つーかtemplate何の関係もないじゃん…
>>954
そうだな、CだろうがC++だろうが使わない。

まず関数のシグネチャが腐っていて(関数内にstatic変数で状態を抱える)
マルチスレッド環境で使えないのは誰の目にも自明。

それと、「パース処理」をあーいう関数でおこなうこと自体がbad idea。

パーサは、1文字づつ読んで状態遷移するように書くのが定石。それを分
かった上でstrtok_r()で手抜きするのは、使い捨てコードなら止めないが
932は使っちゃダメ、絶対。

>>957
ムリヤリつなげてみよう。
ttp://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#466

こんなこと言い出したらキリが無いだろうに。
>>959
へぇ〜
勉強になりますた。
strtok は使わず基本的に自作ってことですか?
スレ違いながら勉強になりました
962932:04/08/02 00:40
CStringArray.add見たいにNULLが入っても気軽にできないかなと思っただけ
なんですけどね、、
そういうのがあるのならCStringArrayとやらを使ったらどうですか?
964932:04/08/02 00:49
>963
MFCは使いたくないと思ってしまいまして、、STLを勉強しようかと思いまして。
>>963
むかつくのは解かるが、そういう返答は的外れだと思う。
>>964
書き込む前に、質問の内容を自分以外が理解できるか、推敲とか反芻とかしましょう。
966932:04/08/02 00:55
>964,965
そうしまつ。みなさんアリガトウ(。´Д⊂)

最後の最後までわけわからんw
>>947くらいなら、
istringstream + skipwsで十分。
969932:04/08/02 01:41
> >964,965
> そうしまつ。みなさんアリガトウ(。´Д⊂)
>>963,965の間違えでした。
STLと日本語勉強して出直します。。

>>968 何ですかそれ?
>>969
調べてから聞け
脊髄反射するな
スレを汚すな
> STLと日本語勉強して出直します。。
>
> >>968 何ですかそれ?

インターネットの常識も勉強したほうが良いですね。
この書き込みを見ると、何だか某M女史の「どうやったら退会できますか」を思い出します。
そろそろ次スレが必要だな
973932:04/08/02 01:54
>>970,971
全くでつ。失礼しました。
>>974
次スレ<typename iTa>は放置の方向で。
ifstreamで一行ずつ読み出すには>>演算子の後にstringをやっていました
string str; ifstream fi(file);
if >> str;

これをistream_iterator<string>でも同様に動くことを期待して
vector<string> v;
copy(istream_iterator<string>(fi), istream_iterator<string>(), back_inserter(v));

としてみたのですが、強制終了されてしまいます。
上のようにvectorに一行ずつコピーするにはどのようにすれば
思い通りの結果となるのでしょうか?

どうかよろしくお願いいたします
>>976
環境は?

fi がすでにファイル末端だったりはしないの?
細かいことだが、back_inserter 使うときは insert が使えるかどうか良く見た方がいい
>>978
使えるかどうかってどういう意味?
v.insert(v.end(),istream_iterator<string>(fi),istream_iterator<string>());
981976:04/08/02 15:26
>>977
環境はVisualStudio.NET 2002をそのまま使っています
ifstreamを作ってからすぐにやっているので先頭だと思うのですが
これで出来るということは自分のプログラムにおかしな部分が
ありそうなのでもう一度確認したいと思います

>>978
今のところはvectorに保存しようと思っております
982976:04/08/02 15:27
>>980
ありがとうございます
それで試しています
17
16
F
E
D
C
B
A
@