C++相談室 part137
レス数が1000を超えています。これ以上書き込みはできません。
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part135
https://mevius.5ch.net/test/read.cgi/tech/1522495206/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured スレ作ってみましたが、これ設定間違ってますか?
ワッチョイほにゃららが出てきてない。 >>1乙
スレの立て方は一番上に書いてある。
前スレや関連スレへのリンクも間違ってるぞ。 前スレの 1N2GRIlb0
ディスクキャッシュに入ってるってずいぶん前からわかってたのに
何でムダな作業をやらせたの? このスレの知恵遅れたちが
どんだけ頭悪いのかよおく分かっただろ
同じ計算機で2秒で終わるような読みこみ処理で
数十秒かかるとかいってたワケだからな
相当オツムが弱い
このスレは知恵遅れしかいない いまになって
分かってたとかいいだしてるしな
ディスク読む時間に知ったかぶって調子こいてた知恵遅れは
どこいったの? 嘘コケ
ハゲ
知恵遅れは前のスレ読んで出直してこいや ハードディスクの内側読みこんで読みこみ時間がどうとかいってた
バカいる? 測らせるならキャッシュに無い状態にしないとアホだろ むしろなバカが指南した方法やコードでは
キャッシュのっかても数十秒かかってたってことだぞ このスレで教えを乞うてるヤツは
何度もデバッグで走らせてるハズのに
知恵遅れの方法やコード数十秒かかるってことだ
オレのは2秒かからない
知恵遅れは息してる? 測定した結果は
fgetsの17秒とreadの1〜2秒しか無い
普通に読むだけで数十秒なんて測定結果は無い 読み方次第で差は歴然と出る
オレの方法は最適な方法だからな fgetsは速いとか言ってなかった?
今遅いことが証明されてるのはfgetsだけ やっぱり知恵遅れはなにも分かってないわ
まず自分が呼んでる関数がどんな動作してるか分かってないからな 何の工夫もないただのreadで2秒なら、
他の方法も読むだけなら2秒 やっぱりこのスレは
相当な知恵遅れしかいない
CもC++も何も分かってない
それ以前の問題 測定結果ででてるからな
相当な速度で速く読みこみたいのに標準関数のファイルポインタ使う知恵遅れなんか
まずいない
ファイルポインタ使う標準関数は
このスレにいる知恵遅れにでも簡単に使えるように
openやread使って使いやすく作ってあるだけだからな fgetsが速いとか言ってたアホが
readとfreadの差を強調する
オーバーヘッドのオーダーは1
読み込みバッファが常識的なサイズであれば無視できる
fgetsのオーバーヘッドのオーダーはn
バッファサイズによらずオーバーヘッドは無視できない まずfreadもバッファもってるのすら分かってないからな freadで測定させれば証明出来るが
で、
もともと測りたかったディスクアクセスの時間は?
まさかキャッシュに入った状態が普通と考えてるわけではあるまい ファイルポインタがもってるバッファから
いちいちこっちのバッファにコピーしてんのに
まずその程度のことすら分かってない 測って見ればわかるって
で肝心の解析コードはどうした?
糞遅いコードを自信満々にあげてたけど クソ遅い?
オレのコードを動かして速度測定したの?
オレより10倍以上低速に作る才能がある知恵遅れのくせに 糞遅い
間違い無い
お前の環境で15GBのテキストを作って解析時間を測ってみな とりあえず
知恵遅れはほっといて
テストデータをジェネレートするコードを
前スレの内容読んでテキトーに作った
https://ideone.com/cPZvWL
baka_genでコンパイルすれば大量のテストデータを作ってくれる優れものだ
※ 指定ギガバイト数越えたら、1つのセクション書ききったら停止する
使い方
Usage:baka_gen <fileparh> <GB size>
出力されてる形式に問題がないかみといてくれ
形式が分からないと解析処理を作りようがない
明日からこのテストデータを解析する処理を作る まず知恵億れはなにと比較して遅いとか書かないからな
オレは知恵遅れが書いたコードより少なくとも10倍以上速い処理を書いてる >>32
なんか error がいっぱい出ているようだが… 15GBのテキストの解析で8.6秒
これを越えればいい なんのエラー書けよ
エラーとかいわれても分かるワケがないだろ
ヴォケ >>33
fgets 17秒
これは俺じゃない
キャッシュに入ったデータの読み込み時間
と
ディスクからの読み込み時間
とを比べて10倍とか言ってるの? >>36
>>32 https://ideone.com/cPZvWL
の下の方にいっぱい書いてあるぞ?本当にコンパイルの通るコードなのか? 8.6秒とかテキトーなことなら
なんとでもいえるからな
どんなファイル読んで
どんなソース作ったわけ?
ファイル形式ちゃんとわかってんの 適切なインクルードファイルを上に書けば
間違いなく通る
ココで教えを乞うているバカですら
それぐらいのことやってる
オマエはそれ未満だ テキストのほとんどが数値の行
10%の割合でx, yの行
セクションは全部で100個くらい
数値は乱数で作成した
実際の分布を考えて、
桁数によって出現率を変えてある
異常データでも不正アクセスしない
文字コードはS-JIS
改行はLFのみ >>41
「unknown type name ‘size_t’」がインクルードファイルで直る問題なのか?
ideone に怒られないコードが書けないのか? 数値は符号付き32bitに収まる値で
printf("%d", n);
で出力される文字列と同じ書式 https://ideone.com/hi8bYd
ヘッダファイルを適切にインクルードしたら
普通にエラーメッセージ消えたぞ
バカはなにをいってるのか意味が分からないワケ なんか知恵遅れがバカみたいなレスをブツブツ書いてるし
ごちゃごちゃいってないでコードあげたらどうだ シングルスレッド、順番に全文字スキャンの処理で
処理時間は1文字平均約2クロック (Haswell)
最適化的にはこれが出発点
さらに高速化する価値がある処理であれば
マルチスレッド,GPU, AVX ...
まだまだ高速化の余地はある 残念ながらクソシンタックスが増えれば増えるほどアホでもテクニカルターム使って
アホと思われない活動が可能になって行くんだよ。 >>32,45
サンプルデータ作成コードありがとうございます。
実行してみましたが面白いですねこれ。
完成したら数十ギガのデータ作って遊んでみたい。
サンプルデータができて説明しやすくなったので色々補足させていただきます。
ちょっと細かい内容になるので、今あるサンプルデータ作成コードを
使用されても問題ありません。
文字コードはutf8 or euc-jpの両方を想定しています。
ファイルの1行目に下記行が一度だけ出てきます。
// タイトル、倍率(mag)。(この係数を使ってCの数値から割る、正の整数。unsigned int)
::fprintf(fp, "%s %d\x0a", "TITLE_NAME", 2000);
具体的には ttps://ideone.com/hi8bYd の64行目に上記が入ります。
Aのセクション集計値は個数が0のときがある。その時はテキスト行だけで終わり。
0 0 1 Jul〜
TEXT TEXT TEXT TEXT
Bのテキスト行は日本語(2byte)が来ることがある。
>つづく QQ行の説明
QQ subname -1 0 0 1 -21000000 600000 2
→この行が無いファイルもある。
→7,8カラムは1行目の倍率数字で割る(数値行と同じ計算)
→3〜6カラムは -1, 0, 1, のいずれか。この4つの組み合わせであとで計算に使うことがある。
1 0 0 1 →TYPE_A
0 1 -1 0 →TYPE_B
-1 0 0 -1 →TYPE_C
0 -1 1 0 →TYPE_D
-1 0 0 1 →TYPE_E
0 -1 -1 0 →TYPE_F
1 0 0 -1 →TYPE_G
0 1 1 0 →TYPE_H
→9カラム目は正の整数。(unsigned int)
→下記6つのバリエーションがあります。
QQ subname
QQ subname c
QQ subname -1 0 0 1 -21000000 600000
QQ subname -1 0 0 1 -21000000 600000 2
QQ subname c -1 0 0 1 -21000000 600000
QQ subname c -1 0 0 1 -21000000 600000 2
※cはcという文字列固定
※1つのファイルに存在するのはいずれか1つのフォーマット
そして少し複雑なのが、上記QQ行は先頭のQQがなくなってx, y行に存在することがあります。
1つのファイル内でQQ行とx, yの後ろにくるパターンの両方は存在せず、片方が出てきたらもう片方は出てきません。
x, yと同じ行にくる場合のフォーマットもQQ行の規則と同じです。
x 1 234 subname -1 0 0 1 -21000000 600000 2
y 2 234 subname -1 0 0 1 -21000000 600000 2
>つづく 最後にRR行があります。
これもQQ同様x, yの次の行にあったりなかったりします。
QQとRRが一緒に出てくることは無いと思います。
フォーマットは「RR 正の整数」でQQのようにx,yの後ろに来ることはありません。
x 1 2
RR 3
11 11 11 11
11 11 11 11
↓QQ、RRが一緒に出てくることは無い。
x 1 2
QQ subname c -1 0 0 1 -21000000 600000
RR 3
↓これも無い
x 1 2 RR 3
>つづく 参考として、ファイルを読み込んだら下記のt_all_dbのような構造体にすべて保管しようと考えています。
型や名前は最適なものに変更されて問題ありませんし、他に最適な
格納方法があればそれでも問題ありません。
typedef struct __tag_rr_db {
unsigned int rr_num;
} t_rr_db;
typedef struct __tag_qq_db {
char qq_name; //subname
bool is_c; //cがあるかないか
QQ_TYPE qq_type;
float numbers; // 2つの数字のリスト(vector?)
unsigned int count; //最後尾の数字
} t_qq_db;
typedef struct __tag_elem_db {
ELEM_TYPE elem_type; // x or y
unsigned int no; // x or yの番号
unsigned int num_line_count;
t_qq_db qq_db;
t_rr_db rr_db;
numbers; //数値行のリスト(vector?)
} t_elem_db;
typedef struct __tag_section_db {
unsigned char name;
unsigned int num_1;
unsigned int num_2;
unsigned int text_line_count;
texts; //テキスト行(vector?)
t_elem_db elem_dbs; //elem_dbのリスト
} t_section_db;
typedef struct __tag_all_db {
title_name; mag; section_dbs; //section_dbのリスト
} t_all_db; そろそろ「ぼくちんのログ解析ソフトを名無しどもに作らせるスレ」でも立ててそっちでやってくれないか いい加減にしろよお前
土方コーダに発注する気分でてめえのクソログの仕様ドヤ顔で書いてんじゃねえよ
ありったけスレ私物化して相談しまくったんだからそろそろ自分の手と頭を動かしたらどうだ ID:p2p9fdhp さん、別のスレに移動を願います。 ume進行だと思えば悪くない
続けて
ていうか徹底的にやれ
ていうかディスクキャッシュのサイズと読込サイズの理想的な関係は微妙なもんじゃわ;
HDD周りのキャッシュには次の3階層ある
(1) 1トラック内のランダムアクセスではHDDだと平均的に1/2回転分の時間待たされるから、
HDD側であらかじめ1トラック分はキャッシュする
(2) シークでは今日日のCPUの速度からみて地質年代レヴェルの遅延が生じるから、
OSにとって都合の良いサイズ(ページサイズとか)を単位とする単位でキャッシュされる
(3) で、その上に標準入出力のバッファがある(setvbuf()で調整できるのはこれ
SSDだと(1)が書き換え回数最適化絡みのキャッシュに置き換わるが、(2)や(3)は同じ
高速化には(3)のバッファリングやアプリ側の処理というものと、(2)と(1)のキャッシングをいかに並行動作させるかがキモすぐる
fgets()とfread()の速度差は、単一ファイルをシーケンシャルアクセスするときは言うほど開きはない(上のしくみから導ける
一方、複数ファイルを交互にアクセスしたりHDDのまちまちな場所をランダムアクセスしだすとたちまち顕在化する(これも上のしくみから導ける
単一ファイルの読込であっても、アプリがファイルの一部を読み込んで考え込む、の繰り返しなパターンならば
アプリ側のマルチスレッド化が有効な「こともある」 今回は該当しないと思うが、、 てな議論はベアメタルでやるならともかく
依存処理系では特定OSの話になるし
抽象化されたハードウエアじゃ特性を仮定すること自体ナンセンス >>57
申し訳ありませんが、C++と関係がない話は、他のスレでやってください。よろしくお願いします。
お気を悪くなされませんよう。 unsigned int l = -1;
cout << l << endl;
cout << (signed int)l << endl;
⇒
4294967295
-1
int m = 4294967295;
cout << m << endl;
unsigned int n = 4294967295;
cout << n << endl;
⇒
-1
4294967295 >>60
unsigned int l = -1;
int m = 4294967295;
がエラーにならないのはなぜでしょうか? http://codepad.org/4odTQaly
↑は、ロベールの本に載っているコードです。
friend class ValueFactory;
//friend Value* ValueFactory::New(int n) const;
↑これを
friend class ValueFactory;
//friend Value* ValueFactory::New(int n) const;
と変更するとなぜコンパイルエラーになってしまうのでしょうか?
ロベールの本には、「不完全型」というのを利用する必要があると書いてあります。
friend class ValueFactory;
↑これはなぜ「不完全型」を使わなくてもOKなのでしょうか? 解釈が間違ってる
ValueFactoryの実体を作って返すためにはすでに定義が分かってないといけない(完全型でないといけない
対してfriend宣言は名前だけ分かってればいい(定義がまだ無い(=不完全型)でいい
というだけの話 >>61
暗黙のキャストのせい。
整数リテラルに型を表す接尾辞がつかない場合は原則として int として解釈されるけど、
int の範囲より大きい場合はそれを表せる最低限の整数型として解釈されるんだったはず。
整数型の初期化 (代入) の右辺に現れた値が左辺の型で表せるときはそのままの値であることが保証されるが、
そうでないときは一定の規則に従って縮小される。
縮小の仕方は、
左辺が unsigned のときは、左辺の型が表せる最大値に 1 足した数で右辺の modulo を取った値が左辺に入る。
左辺が signed のときは未定義。
なので、 (int が 32 ビットの大きさをもつとき) unsigned int l = -1; が 4294967295 になるのは規格通りだが、
int m = 4294967295; が -1 になるのは保証されない。
規格を確認せずに記憶で書いてるので、
もし間違ってたら誰か指摘よろー。 c++で文字列のバイナリ読み書きで質問があります
vector<string> moji = {"aaaaaa", "bbbbbb", "ccccccccc"};
ofstream ofs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
ofs2.write(moji[i].c_str(), strlen(moji[i].c_str()));
}
書き込みは、エラー無くできるのですが
ifstream ifs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
ifs2.read((char*)&moji[i], strlen(moji[i].c_str()));
cout << "(" << i << ")" << moji[i] << " ";
}
読み込みは、読み込んで表示も出ますが
何かエラーが出ます
どうしてでしょうか 書き込んだものに区切り入れてないけどそれでいいの? >>63
ありがとうございます。
ソースコード全体をコンパイラがみれば定義も分かるのに、なぜコンパイルエラーにするのでしょうか?
>>64
ありがとうございました。 >>63
例えば、 Python では、相互に参照していてもOKです。 コンパイラーについての知識がないと理解しにくい部分でしょうか? >>66
なにか、ヌル文字を読み込もうとしてるエラーのようで
なるほど、区切り文字というのを入れて
getlineとかを使用して読み込んでいくべきなのかな・・・・ とりあえず、区切り入れてgetlineで一行ずつ読み込めました
vector<string> moji = {"aaaaaa", "bbbbbb", "ccccccccc"};
ofstream ofs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
moji[i] += "\n";
ofs2.write(moji[i].c_str(), strlen(moji[i].c_str()));
}
ifstream ifs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
string temp;
int i = 0;
while (getline(ifs2, temp, '\n')) {
cout << "(" << i << ")" << temp << " ";
i++;
}
これでまたvector<string>に入れたらいいか
c++はHSPとかと違って難しいですね >>70
&moji[i]はstringインスタンスの格納先アドレスであって、中に格納されている文字列データの先頭ではないよ。
無理やりやるなら
ifs2.read(const_cast<char*>(&moji[i].data()), moji[i].length());
とかすれば動くと思うけど
>>71
文字列以外も書き込みだしたら\nと競合するけどいいの?
getline使うならbinaryモードは使うべきでないと思うし、そもそも文字列しか書き込まないならbinayモードにする必要ある? あとエラー出力は正確に書いてくれないと、コード全部読まないといけないからしんどいです… >>67
C++はそういうコンパイルの仕方しないから
cppごとにオブジェクトファイル(クラスのインスタンスとしてのオブジェクトとかとは別の意味)というのを作ってから
オブジェクトファイル同士のリンクという作業をして目的の実行バイナリを作る
オブジェクトファイルは自分自身で完結してないといけないので、
「ValueFactoryとかいうクラスのポインタ」「ValueFactoryとかいうクラスがfriendだという情報」は持つことが出来るけど
(別のファイルがValueFactoryの実体を持ってると期待して)
ValueFactoryの実体作れとか実体使ってなんかやれ(そういう実行コードを保持しろ)と言われたら困ってしまうってこと >>72
数字の配列はバイナリでエラー無いので
やはり、文字列はテキストに出力したほうがいいんかな
>>73
今度からはそうします
すみませんでした もちろんバイナリ形式でもいいのだけど、その場合は文字列を固定長にするとか、tlv形式で作ってみては?
https://en.m.wikipedia.org/wiki/Type-length-value 大規模ファイルの読み込みについて相談しているものです。
以下調査結果です。
ファイルは上記で13GBのファイル生成したものを使用
https://ideone.com/hi8bYd
@下記コードの結果
https://ideone.com/e9iA5m
512,15 →15秒
1024,7 →7秒
2048,5 →5秒
4096,3 →3秒
8192,2 →2秒
>つづく A作成した下記コードでテスト。 →約2秒
https://ideone.com/1YhaLR
(整理できておらず、かなりぐちゃぐちゃなコードですが。。)
内容:freadのみ
B上記Aで、「#define READ_MODE 1」で実行 →約25秒
内容:改行単位にするため、前スレ962の下記Cを対応したつもりのもの
A. 1行全体が連続してバッファに存在しなくてもいい作りにする
B. リングバッファ
C. fseekでファイルポインタを戻してから読み込む
D. あまりをmemcpyでバッファの先頭にコピーしてから読み込む
E. ほか
C上記Aで、「#define READ_MODE 2」で実行 →約60秒
内容:上記B+解析
Dfgetsのみ →約15秒
if((fp=fopen(file_path, "r"))==NULL){
printf("ファイルを開けません。%s",file_path);
return 0;
}
char tdata[10000];
char* data = tdata;
while( fgets(data,10000,fp) != NULL ){
data;
}
上記Aが約2秒なのにBの改行単位のケアで25秒に増加しているので、
まずここの作りがおかしいんだろうなとは思いますが、
何がおかしいのかが、まだわかっていません。 fseekをつかうのなんか絶対ダメだ
fseekされることで標準関数がFILEポインタでもってるバッファも
めんどいことになってるのが容易に想像がつく
そしてさらにlseekもシステムコールも呼ばれる
標準関数の実装のされかたにもよるが
大きな性能劣化は避けられない
Dの方法でひたすら シ リ ア ル に読まないと遅くなるのは当然
そんな標準関数でやってるようなことを、
こっち側でやるならそもそも標準関数使う意味がない
普通にopen、readでこっちが渡したメモリにそのまま読みこむほうがいい
まずFILEポインタ使ってfreadしか使わないなら、はっきりいってfread使うメリットは
まったくない
関係ないようで関係ある話だが
キャッシュがきいてない状態ではposix_fadviceを呼んでおくと
シ リ ア ル に大きなファイルを読み込むときには、計算機の状態によっては
劇的に改善することがある ちなみにファイルはUNIXでは
ブロックデバイスだからな
そのブロックデバイスをセクタ単位で
効率的に読み込むためにはどうすればいいか
あとはもう分かるな
このスレにいるサル並の知能しかないようなヤツラ以外なら
わかるハズだからな まずストレージというハードウェアが
OSでどうやって抽象化されてるか
わかってないからな
こんな頭悪いヤツラが抽象化とかなんとかいってるワケ
きっとな前スレのソースの注釈で書いたwindowsで、キャッシュなしでReadFile呼ぶ時は
セクタの倍数単位でないと使えないという意味も分かってない
ともかくこのスレに居ついてるヤツラは頭悪い
基本的なことが分かってないからな
まずなバカはこのスレで相談することが
バカな行為であることに気付かないといけない
バカななに聞いてもムダ
的外れなコタエしか返ってこない >>80
> FILEポインタ使ってfreadしか使わないなら、はっきりいってfread使うメリットはまったくない
メリットはあるでしょ。システムコールのreadやReadFile()と違い、
FILE*を使ったfread()はアラインメントを無視した小さいバッファサイズで読み込んでも全体としての速度低下が起きにくい恩恵がある。 13Gログ解析野郎と半角野郎が毎度毎度必ずコンビで出てくるのは何なんだろうなー
おっかしいなー
「ぼくちんのログ解析ソフトをぼくちんが考えた最強の名無しが作るスレ」でやってどうぞ 低学歴で知能低いのが答えられる質問の範囲なんかたかがしれてる
知恵遅れでも回答できる質問に限定される
こういうヤツラはYahoo知恵遅れがお似合い
もうね2ちゃんねるのクオリティーも著しく低下したもんだわ
著しくレベルの低い質問なら回答できるワケだからな
情報として保存される価値すらない
ゴミ質問とゴミ回答 昔ならググレカスでおわるような質問を
どやがおで低学歴知恵遅れが回答するスレがココだからな
低学歴知恵遅れが活躍できる場所はココしかない
オレのナワバリを荒らすなと低学歴知恵遅れが
主張している POSIXの制限に起因するパフォーマンス低下を回避するためのドライバをさっき見たばかりだな。
ハイパフォーマンスの世界にはそういうのもあるんだな。 >>85
解析のコード書けたの?
お前が全部作ってアップすればそれで終わる とりあえずファイルすべての字句解析と
最低限のデータ取得できるとこまではできた
※ あとはデータを格納するだけ
テストデータのジェネレータを修正した
https://ideone.com/NWdMmL
で、とりあえず作ってみた解析のコードが↓コレ
https://ideone.com/E6QH2r
プリプロセッサにDEBUG_WRITEの定義を追加してやれば
データ取得できてることがダンプして確認できる
※ ダンプする場合は、ファイルにリダイレクトするにしても
※ 物凄い時間かかるし、物凄いディスク容量をとるから小さいテストデータでやるほうが
※ とりあえず無難
ものすごい単純なコードプロトタイプになってるから
バカでもチョンでも簡単に整理や作りかえができるようにはなってる
※ 処理内容はコードみたまんまのハズだ
※ 同じような処理がひたすら書かれてる
※ QQがなくなればめっちゃコード減るハズ
※ コードのほとんどはQQのムダ処理 15GBのテキスト解析8.6秒のマシンで
>>90の時間を計ったら54秒でした。
ファイルアクセスの時間は除いた純粋な解析処理です。
これがプロとアマチュアの差ですか。
まあ54秒でも使えるレベルではあると思うんで
これで良いんじゃないですかね? OS のAPI を、直接呼んではいけない。
例えば、1バイト読み込みを千回やれば、千回API が呼ばれる。
ユーザーモードからカーネルモードへの、コンテキストスイッチが千回
一方、バッファリングしている、C のライブラリを使えば、
千バイト1回の読み込みで済む
ライブラリが抽象化している。
buffering stream
ユーザー → (ライブラリ) → API >>90
今回相談しているものです。
ありがとうございます。
まず >>78 でAが2秒、Bが25秒の違いを調べました。
>>78 のBで実行するため昨日アップした https://ideone.com/1YhaLR に
「#define READ_MODE 1」を設定し25秒かかることを確認。
ここから後ろの処理からコメントアウトしていくと、下記行の前後で
25秒から2秒に変わりました。
88行目: data = real_data;
real_data(char型)のポインタをdata(char型のポインタ)に代入したつもりだったのですが、
もしかして実体がコピーされているのでしょうか?
>つづく 続けて >>90 のコードを実行してみました。
データ生成の方は、>>51 の最後に説明している、
「1つのファイル内でQQ行とx, yの後ろにくるパターンの両方は存在せず、片方が出てきたらもう片方は出てきません。」
というところで、1つのファイルに両方のフォーマットが生成されていましたが、
両方が読めれていれば特に問題はないと思います。
読み込み用のコードは自分の環境では %"PRIu64" → %" PRIu64 " とスペースを開けないとなぜかエラーになりました。
あとargv[2]がよくわかりませんでしたが実行できたのでとりあえずそのままにしています。
以下結果
## 1GB
time ./a.out aaa_1gb
strat... ./a.out aaa_1gb (null)
done... ./a.out aaa_1gb (null)
4./a.out aaa_1gb 3.69s user 0.14s system 99% cpu 3.839 total
## 5GB
time ./a.out aaa_5gb
strat... ./a.out aaa_5gb (null)
done... ./a.out aaa_5gb (null)
18./a.out aaa_5gb 17.40s user 0.78s system 99% cpu 18.216 total
## 13GB
time ./a.out aaa_13gb
strat... ./a.out aaa_13gb (null)
done... ./a.out aaa_13gb (null)
47./a.out aaa_13gb 44.99s user 1.73s system 99% cpu 46.781 total
みなさんキャッシュの話をされていて、その辺がまだあまり理解できていないのですが、
文字列解析時にはキャッシュから取り出して参照するため時間は増えるということですかね。 あと、freadだけで2秒のものに、freadの後にからなず fseek(fp, -10000, SEEK_CUR) を実行してみましたが、
処理時間は2秒で変わりはありませんでした。
これらのことから >>94 で書いている
88行目: data = real_data;
のせいで2秒から25秒に増加しているようです。 今 >>90 のコードを >>95 と同じ環境で、readをfreadに変えて実行してみたところ下記になりました。
readとfreadで速度に変わりはなさそうです。
## 1GB(fread版)
./a.out aaa_1gb
strat... ./a.out aaa_1gb (null)
done... ./a.out aaa_1gb (null)
4
## 5GB(fread版)
./a.out aaa_5gb
strat... ./a.out aaa_5gb (null)
done... ./a.out aaa_5gb (null)
18
## 13GB(fread版)
./a.out aaa_13gb
strat... ./a.out aaa_13gb (null)
done... ./a.out aaa_13gb (null)
48 かわりがないとか
んなわけがないからな
先にいっておくが
ちなみにオレのコードより
おなじところまで解析できる処理を
速い速度で作れるヤツはまずいないからな
作れるもんなら作ってみればいいわ ちなみにDEBUG_WRITEを定義に追加したら死ぬほど遅いからな
ちゃんとDEBUG_WRITEをとって計測してるのかすら怪しい
バカが書いたコードより間違いないなく速いハズだからな 同じデータで、2回テストしても、
1回目は、HDD からメモリへ読み込むけど、
2回目は、既にメモリ上にデータが存在するから、HDDから読み込まない。
メモリキャッシュから読むから、HDDの読み込み速度とは違う
だから、2回目のテストの前に、
メモリキャッシュをすべて破棄しておいてから、テストをしないといけない コレで他のより遅いというなら
オレはもうバカの相談には二度とのらないし
コレ以上のコードは書かない
ほぼ限界まで速度が出るようにチューニングしてるハズだからな
評価のしかたが分かってない シロウトは口だけだからな
クソニートのシロウトが口をはさむ余地なんかない ザコはオマエだろ
クソニートのザコはコードあげずに
何秒とかいってるだけだからな 数値への変換、何で標準ライブラリ使うのやめたの?
速いんでしょ?
www 読み込み速度で問題
そしてポインタをひたすらインクリメントだけして
ひたすら最小限の参照するだけの処理より速い処理なんか
逆立ちしてもかけるワケがないからな fgetsはシロウトが使っても概ね良好な結果が約束されてる クソニートがいきがってるしな
オレが書いたコードを超える速度がでるコードを
まずあげてみろよ
話はそこからだからな クソニートはテキトーなことばっかりいって
口だけだからな 糞コードがなぜ糞か
どこで時間がかかるのか
それくらい自分で調べよう だからクソニートはコードあげろよ
オレのコードにムダは一切ない だからクソニートは口だけ8.6秒のコードをあげろよ オマエはクソニートだからな
クソニートはコードの速度の心配をするまえに
自分の心配をしたほうがいい https://ideone.com/e9iA5m
g++ -o baka_test $file_name
echo 512,`./baka_test $input 512` > baka_result.txt
echo 1024,`./baka_test $input 1024` >> baka_result.txt
〜
上記を13GBのファイルで試したら下記結果が出ました。
512,13
1024,7
2048,5
4096,3
8192,2
16384,2
32768,2
65536,2
131072,1
262144,3
524288,2
1048576,2
2097152,2
4194304,2
8388608,2
16777216,3
33554432,2
67108864,3
134217728,3
268435456,3
536870912,3
1073741824,3
バカが試験してシステムコール呼びだしのオーバヘッドの評価なんかすでに評価済
(システムコール呼びだしのオーバヘッドの評価なんか、バッファサイズを変更による推移をみれば簡単に評価できる) まだキャッシュに入ってる前提でテストしてるの?
アホなの? また低学歴知恵遅れのクソニートがテキトーなこといってるからな
キャッシュにのってるなら
オレのエレガントなコードを除いたすべてのクソコードも同じキャッシュがのった条件で
試験されてるわ 低学歴知恵遅れのクソニートってテキトーなこといって
なんかいった気になる
社会参加しないクソニートが2ちゃんねるで政治の話をするのと似てる 1秒〜2秒なんてどうでもいい
キャッシュに無い時の読み込み時間
解析時間
これをどうにかしろよ
意味の無い所に時間をかける典型的なアホ 今 >>90 の解析コード見てますがseekを使わずreadで連続して読み込むところがとても参考になります。
こうやって読み込むんですね。 オマエはまずオレのエレガントなコードを参考するまえにな
この愚かなコードをどうにかしたほうがいい
unsigned char real_data[BUF_SIZE+1];
size = fread( &real_data, sizeof(real_data[0]), BUF_SIZE, fp);
data = real_data;
遅いどころかそもそもちゃんと動作すらするワケがない
マジでな、オマエは今までなにをやってたわけ?
小一時間問い詰めたいわ
はっきりいうわ
オマエ、才能ない オレが引用したオマエのコードが
なんでお話にならないくらいダメなのか
理由が分からないならオマエはCをさわらないほうがいい
コレはいいきれる
速く動作させたいとか以前の問題だからな エレガントなコードwww
糞汚くて激遅なコード
お前は偉そうに語れるレベルじゃない テキトーに作った1作目
前スレの>>851の24.3秒
の倍以上の時間で
もうネタ切れのザコ ごちゃごちゃいってないでな
クソニートはオレより速くできるコードをあげたらどうだ
クソニートが邪魔でしょうがない 何の邪魔?
5chで名を上げようとでも思ってるの?w どうでもいいが
クソニートは邪魔しかしないからな
オレのエレガントなコードに嫉妬してるワケ
まちがいなくオレのコードより速いコードなんかかけるワケがないからな クソニートはこうやって社会と接点ももったつもりになってるワケ
分かりやすい
ニューススレなんかに湧いてくる社会参加してないクソニートとそっくりといっていい ココは相談スレだからな
まちがいなくクソニートは相談スレの邪魔をしてる もうね図星つかれて
顔真っ赤だからな
ホントな分かりやすいわ
分かってしまうのが怖いわ だいたい分かる
登校拒否児のまま高齢ニートになったようなのが
このスレにはウジャウジャいる
低学歴なまま精神的に大人になってないような知恵遅れの典型的なレスパターンだからな
いわゆるヒキコモリというヤツだ クソニートは相談スレに参加できるレベルに達してないからな
いままで参加できてると錯覚してたワケ
参加できないからIDが赤くなるまでレスもできない
ホンモノのプロフェッショナルなオレがくればこうなる
知恵遅れがオレスゲーできない
唯一の自分が社会と接点をもててると錯覚してる唯一の場所が
オレに乗っ取られたワケ
くやしいの? ホンモノのプロフェッショナルなオレ
ホンモノのプロフェッショナルなオレ
ホンモノのプロフェッショナルなオレ
ホンモノのプロフェッショナルなオレ
ホンモノのプロフェッショナルなオレ 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) 最近バーチャルYouTuberは4,000人を越えています。
そこで今どのVtuberが人気なのか調べてみようと思います。
第二回バーチャルYouTuber人気投票ですが、Vtuber界隈の変化が激しい為、投票受付期間中であれば、
一度投票した内容を変更できるようにしました。
今回は一人三票です。今回からモンスト、鈴木ヒナ、ポン子、アイドル部など強力な新人さんも入っておりますので、
投票をよろしくお願いいたします。
現在830票
あなたの好きなVtuberは?
https://goo.gl/forms/wHUyA3Phxj6y2nu73
・2018/6/5時点でチャンネル登録数10,000人以上のVtuberを対象としています。
・一つのチャンネルでVtuberが複数人いる場合は、それぞれ分けています。
・一人三票です。
・このグーグルフォームに投票するにはグーグルアカウントでログインする必要があります。
・並び順は前回の得票数の高い順と新人は登録者数の多い順に並んでいます。
・今回も1,000人の方が投票するまで継続します。
・受付期間中は何度でも投票内容を変更できます。
第一回バーチャルYouTuber人気投票結果(2018年5月7日〜5月30日、全投票数1,000票)(スプレッドシート)
https://docs.google.com/spreadsheets/d/e/2PACX-1vTpmFxf3MHjezIdvmte2CD6kWk4so-gtI8a9XJVjS_O0aMZhekYnSCj-n4DCLfHGXhke7HZYbJM1TEa/pubhtml?gid=0&single=true とりあえず、バカでも使えて修正できる
パーザーのクラスのサンプルでも気が向いたら作っといてやるわ
こんなもんデータを全部格納できるワケがないからな
今の解析コードのサンプルでも位置とサイズの情報はガッチリとってるから
いくらでも改良できる
オレみたいなプロフェッショナルになると、こんなことハナから予見できてるワケ >>94-97
「ぼくちんのログ解析ソフトを半角さんが作ってくれるスレ」を立ててそっちでやってくれないか >>146
今のサーバはメモリに多少余裕があるから全部メモリに格納しようと
思ってましたが、よく考えると数人同時に使ったり他の低スペックサーバを
使うことを想定すると確かに名称、テキスト、数値の番号と位置など
最低限の情報だけ拾ってその都度ファイルにアクセスした方が
他の人に迷惑がかからず良さそうです。
気が向いたらよろしくお願いします。
自分でも検討してみます。
>>147
相談しっぱなしは悪いと思い、色々調べた結果を出してしまいました、すみません。 ハイ、謝罪と賠償の要求いただきました!
みんなー、謝罪と賠償の要求出たぞー! int a;
if( hoge ){
const a = 1;
}
else{
const a = 2;
}
とすると不安定な動きをするのですが、
このコードは許されないのでしょうか。 const a = 1; ってなんぞ??と一瞬思ったがintが省略されてるのか
それブロック内ローカル変数だから、外のint a;には関係しないよ
>157に書かれてるところは許されるけど、
書かれてないところでint a;を使ってたらそりゃ不安定だろうね 不安定な動きはしないと思うが
ルールがわかってないだけで 外側のaを初期化してないから不安定になる可能性はある。 aを不定なまま使えば不安定になるかも知れないが
>>157のコードだけならなにも問題ない
>>157の回答としては
「許される」が正解 int a; // 未初期化
if (hoge) {
const a = 1; // if の中だけで使える変数aを新たに宣言
const int b = 1; // こう書いてbを使うのと同じ
} else {
const a = 1; // else の中だけで使える変数aを新たに宣言
const int c = 1; // こう書いてcを使うのと同じ
}
int i = a; // 未初期化のままaを使おうとして「不安定な動きをする」 そのうち褒める褒めないで動作が変わるようなAIコンパイラが出てくる もうしわけない。金毘羅様に言及すべきだったのにそうしなかったのが情けない。 警告オプション有効にして助言をもらおう
> warning: variable 'a' is uninitialized when used here [-Wuninitialized] そんなのは道楽でC++やってるあまちゃんのたわごとだ
俺なんかは最初からC++以外に用意されてなかった c++はできるだけの範囲で出来るだけのことをやればいい
意欲があればさらに進めばいい
むりして難しいことをやらなくてもいい
c関数での文字列の処理が嫌ならstring使えばいい
楽なところは楽でいい template <typename TypeA, typename TypeB> void TempSet(TypeA* Obj, void (TypeB::*Method)())
{
*Obj->*Method;
}
これがエラーでコンパイルできないんですが、
TypeBのメンバ関数呼び出すのはどうやればいいんでしょうか?
TypeAはインスタンスのオブジェクトポインタです >>174
TypeA はTypeBの間違いで、
Obj->Method();
でないの? >>177
なるほどそれですね、ありがとうございます。 VMWare使ってLinux入れてみた
貧弱なPCでめちゃくちゃ重すぎるがコレで普通にコンパイルはできる
いままで黙ってたがMSのコンパイラでコンパイルしてたからな
やっとオレの芸術的なパーザをコピペで作る準備が整った コンパイルするためだけにVMWarewwwwwwwwwwwwwwwww ubuntu on windows は、ウィルス対策ソフトのウィルス・バスターがubuntu上のプロセスを監視対象として認識しないらしく、きびきびと起動・実行できる。
それがいいことか悪いことかは、さておき。 botがそんな反応するか
そういうことにしたいのなら
見逃してやるが 32bitのlinuxしか入らんから
それでもいちいちめんどくさいことは分かった macならdockerでlinux環境作るのもありかなと思ったが、
winだとまだdockerインストールめんどくさげだね。 >>179
自分もvmwareでlinux入れてましたが、メモリ4GB(有効なのは約3GB)の初代i3ノートPCで、vmware割当メモリ700MBくらいで使ってましたが
かなり重かったけど立ち上がったらそこそこスムーズに使えてました。
メモリ8GBくらいあればvmwareに1GB〜2GBくらい割り当てれば、そこそこストレスなく使えそうな気がします。
ちなみにすでに知ってるかもしれませんが、win10だとubuntu?っぽいのを直接インストールできます。
windows内にゴミがたくさんできそうだから個人的には躊躇しますが。
ttp://www.atmarkit.co.jp/ait/articles/1608/08/news039.html それは入れないほうがいいよ
互換性問題があるしかなり機能を絞られてる
使ってみてわかる誰得機能
容量も十数G必要
VirtualBoxを普通にいれたほうが使い勝手がいい > 容量も十数G必要
いや1GBも要らんよ、どこ確認したんだw
WSL丸ごと%LocalAppData%\Packages\CanonicalGroupLimited.*.ならんちゃらに突っ込まれる形式だから
ホストOSにゴミが残るってのも杞憂
最近はDocker Engineがそれなりに動く程度には互換性も高まってきてるみたいね
エクスプローラのアドレスバーからbashで窓側をカレントディレクトリにして起動できるのが良い >>192
> 互換性問題があるしかなり機能を絞られてる
WSL(Windows Subsystem for Linux)は、C++やLinuxシステムコールを使ったGNUプログラミング環境としては必要十分だと思うけど、具体的にどんな問題あるの? >>194
サービス書くときかな。
他はWSLが楽だと思う。 Linuxを使う意図はサーバーか組み込みなので、WSLで足りない場合もあると思うんだけど、ひな形があれば済む話かもしれんね。 サーバ系がサポートされてない
使うならVM使ったほうがいいよ
ファイルシステムもwindowsのものの上に作られてるのであれこれ問題が出る
>>193
1Gというのが笑えるw
コンパイルしないのかw >>197
VMは大げさすぎるかな。
使えるときはWSLを積極的に使っていきましょうよ。
とてもいいものですから。 VMは一つのパソコンで複数のOSを動かすのでOSの数だけメモリーを食うんですよね。
その点、WSLはWindowsがLinuxのようにふるまうだけなのでWindows分のメモリーしか食いません。
そんなわけなので、お財布にやさしいんです。
それでいてサービスの開発以外では全く遜色在りませんし、そもそもサービス開発だって、大詰めを迎えるまではdaemonとして起動することはないでしょう。 bash使うだけならわかるけどコンパイルも含めて何か使おうとするなら
既知の問題や互換性に問題もあるものを選ぶのはクレバーだと思わない WSL上のバッドノウハウをひたすら集めたいとか
縛りのある環境のほうが燃えるというなら止めはしない
ただわからない人に勧めるものじゃないなって思う
不具合があった場合それがどこ由来なのか特定できない人間には特にすすめちゃダメ >>200
ディストリビューターが開発する本物のディストリビューションですからまったく問題ありませんね。
Canonicalが開発した本物のUbuntuがWindowsで動くのです。
もちろんDebianであっても同じことです。 >>199
>>202
ディストリビューターが提供しようが
WSLはlinuxでもないwindowsでもない不思議な物
両方の制限の積 windows ∩ linuxでありわざわざ苦労することはないよ
windows上の疑似linuxであってかなりニッチな物
どこかおかしくても不思議じゃない WSL、CMake、VCPKGがお勧めキーワードです。
C++ユーザーにはUbuntuをお勧めします。
gcc-7を導入してC++-17をご利用ください。 どこかおかしくても不思議じゃない(どこがおかしいのかは知らない) 今のWSLはLinuxのdaemonもサポートしてるから問題ないと思うんだけど、具体的にどんな問題起きたの? Visual Studio 2017にはLinux DebugとLinux Releaseというターゲットがあり、標準でLinuxをサポートしていますよ。 c++使うような厳格さを求める人間がWSL使ってるとは思わなかった
WSLで動いたとして他の環境で動くとは保障されないのに
どこがおかしいのか推定もできない仕組みの上で何故ごみを作るんだ >>206
init機構がWSL用だから。
それを言い出すと、RedhatとUbuntuだって違うじゃないかということになるけど、Redhatに配備するものはRedhatで開発してたのが今までのスタイルなので、VMのほうが良いという人はその点を指摘してるんじゃないのかな。
それ以外にWSLを使わない理由がないので。 まあ逆に言うと、WSLで動かないのであれば、Linuxディストリビューション間でも可搬性が無いよね。 >>208
実機Linuxならどこがおかしいか推定できるという根拠はないでしょ。
むしろ、WSLのような抽象化された環境でさえ動かない稚拙なものを実機に持っていく気なの?と言い返すことさえできるのだけど。 違う違う
普通のlinuxで動くコード書いててもWSL上では動かせない場合があるのが問題だろ >>212
そういうものがあるのかどうか知らないけど、あるならなおさらWSLで開発したほうが可搬性を担保できてよいのでは。 >>211
根拠とかそんなんじゃない
考慮すべきことが多すぎる
自分のコードがおかしいのか
linuxのそもそもの仕組みがおかしいのか
MSのWSLがおかしいのか
ディストリビューターの提供してるイメージがおかしいのか
それぞれが組み合わさっておかしくなってるのか考慮する条件が増えすぎる >>212
問題なんてほぼないでしょ。
VM上で動いて喜べるレベルならWSLでも同じだから。
あなた、WSLで動作確認したことあるの?もしや憶測で書いてない? clはかなり寛容なコンパイラなので、gccでコンパイルできるかチェックしとくとより良いコードが書けますよ。
そんな用途でもWSLは素晴らしいと思います。 >>214
それたぶん、自分のコードが悪いと思いますよ。
Linuxは十分安定してるので、Linuxの問題を真っ先に疑うのは、自信ありすぎだろって感じます。 >>215
最初のころはめちゃくちゃだったのでもう入れてない
ハードリンクの仕組みもおかしいし
タイムスタンプもおかしいし
TCPなど制限も山盛りあった
すでにあるコードも何故か動かないことが多かった >>214
抽象化されていると問題特定が容易と考えるのが一般的だと思っていたのだけど、
抽象化された環境は問題特定が難しくなるという考え方は画期的ですね。 linuxが安定ってジョークか
linuxカーネルは常にバグがボコボコ出てるよ クロスプラットフォームを標榜するなら、開発環境としてWindowsを選択するとよいです。
Visual StudioはWindowsとMacで使えます。
WSLによってVisual StudioからLinuxバイナリを構築できます。
MSBuildとCMakeは悩みどころですが、MSBuildはサポートが手厚く、CMakeはVisual Studioが無くても構築できます。
そこらへんで選択するとよいのではないでしょうか。 まあ僕はVisual Studio、WSL、VCPKG、CMakeプロジェクトを使っているので、わかることはお答えしますよ。 悪いことは言わないので、LinuxプログラムはWSLで動くことを優先して書くことをお勧めする。
他人のために時間を使いたくないのは誰でも同じ。おのずと楽に評価できる環境に流れるのは止められない。 イスラームの救貧制度がかえって免罪符の役割を果たしてないか。
イスラームの救貧制度があることで、かえって商業上の強欲が横行していないか。 誤爆したけど、謝罪はしない。
イスラム教は野蛮な宗教である ★4
ttps://lavender.5ch.net/test/read.cgi/whis/1525163440/ だいたいでけてきたわ
コード修正をすることによって効果を簡単に計測できるように修正してる
こっちのが結構大変だったわ というわけでうpした
長い戦いだった
http://fast-uploader.com/file/7087832585811/
baka_source.zip
build.shを実行すると、3つの実行モジュールができる
3つとも少し修正した(解析処理はファイルがものすごい増えたから大きく修正したように見えるハズ)
・テストデータジェネレータ(データの出力個数の出方を少し修正した)
・ストレージ能力計測プログラム(I/OのアドバイスをOSに与えるように修正)
・解析処理(1. 解析の処理方法自体は一切かわってないがコードの構成をバカでも分かるように変更 2. I/OのアドバイスをOSに与えるように修正) で、パーザーは基本に則った作りになってる
クラスに分ける意味があるかどうかはおいといて
一般的な再帰下降パーザーになってる
BNFを構文解析する要領と同じといっていい
バカでもチョンでも分かるハズ
baka_parser_all
┣baka_parser_title
┗baka_parser_sections
┣baka_sub_parser_section
┣baka_parser_section_stat
┣baka_parser_text
┗baka_parser_elem
┣baka_sub_parser_xy
┃┗baka_sub_parser_qq_value
┣baka_parser_numbers_x
┃┣baka_sub_parser_qq
┃┃┗baka_sub_parser_qq_value
┃┣baka_sub_parser_rr
┃┗baka_sub_parser_number_x
┗baka_parser_numbers_x
┣baka_sub_parser_qq
┃┗baka_sub_parser_qq_value
┣baka_sub_parser_rr
┗baka_sub_parser_number_y
詳細な解析処理をする前に
簡易な解析処理をしたい場合(ブロックの位置情報やサイズ情報なんかだけを先に取りたい場合)、
そのクラスにそのレベルの処理を突っ込んどけばいい
解析処理の詳細さの粒度はそこでテキトーにきめればいいと思う 一応、parserとsub_parserの違いだけ捕捉しておく
結論からいえばデータの形式がくさってるからそういうのを入れた
parserクラスは最初に一行読んで、必ず次の行頭(LFの次)でポインタが停止するようになってる
sub_parserクラスは行は読まずに、与えられたポインタから行の途中でポインタが停止するようになってる
※ 例外はあるがsub_parserクラスは大体 LF の上(行末)で停止する
※ 停止しない例外は、sub_parserクラスが連続してる箇所が間違いなく該当することになる コードの記述に一箇所誤りがあった
動作に影響は一切ないが記述ルールに問題があるから
修正しといたほうがいい
削除
baka_sub_parser_section.h
(L34) ++c_buf_p_; // skip LF
追加
baka_parser_sections.h
(L48)++c_buf_p_; // skip LF
ひたすら元のコードをコピペして貼り付けてたから
気付かなかったわ
このスレで相談してたバカはちゃんと動作確認してんのか ちなみにオレのpcのosはvistaだからな
まずwslなんか動くワケがない
あと、オレのpcは32bitの計算機だから
32bitのlinuxしか動かない
pcが32bitだからな
512MBのメモリでvmware動かして
slackwareのlinuxで動作確認をした
ちなみに64bitのwindowsは一切考慮してない
考慮不要だからな
32bitのlinuxと32bitのwindowsで動作確認はできてる
つまり64bitのlinuxでは動作確認はしてないが
一応、64bitのlinuxにも対応できてる想定になってる
きっと動く
※ baka_common.hぐらいの考慮で十分なハズ ほとんどストレージの読み込み時間
パーズはばっちり
これ以上ないデキだ
解析する量を減らせばもっと速くなる
動かせば分かる
印字されるスループットを
どうすれば最大化できるか考えるのはこのスレのバカだ
道具はほぼすべて揃ってる >>228
I/Oのアドバイスとか何言ってるのか分からない。日本語でOk >>228
ありがとうございます。
なぜか下記修正をしないとコンパイルエラーで怒られました。
gcc-8.1を使っているけどそのせい?
baka_common.h
PRIu64を有効にするため27行目に行追加:#include <cinttypes>
baka_spec.cpp
107, 111, 125行目を修正:%d → %zd
build.sh
clock_gettimeを有効にするためコンパイルオプションに-lrtを追加
少しコードを見ましたが、クラスのオブジェクト生成時に&があるのが
何を意味しているのかよくわかってなかったり、classのpublic内に関数名だけでなく
関数の中身も直接そのまま記述できるのを初めて知ったりと
色々新しい所があるのでじっくり見て勉強したいと思います。
つづけて実行結果を書きます。↓ 取り急ぎ新しいgenツールで13GBを作り、読み込んでみました。
※ >>231 の修正ままだしてませんが大丈夫ですかね?
## spec(ハード性能チェック?)
LINUX% ../baka_spec ./aaa_13GB
Mon Jul 23 18:14:22 2018 : starting... 14107393277 bytes read (read block size = 131072 bytes) ./aaa_13GB
〜
Mon Jul 23 18:14:24 2018 : done... 14107393277 bytes read (read block size = 131072 bytes) ./aaa_13GB
read_block_size ::= 131072 bytes, file_size ::= 13453.86 MiB, turnaround_time ::= 2.27 sec, throughput ::= 5920.39 MiB/sec
※複数回実行でだいたい5500〜6000 MiB/sec
## parser
LINUX% ../baka_par ./aaa_13GB
"./aaa_13GB" : size = 14107393277 bytes
Mon Jul 23 18:15:19 2018 : starting... ../baka_par ./aaa_13GB
Mon Jul 23 18:15:19 2018 : section_count = 1, offset = 144275554 bytes, size = 144275513 bytes, turnaround_time = 0.21 sec, throughput =
646.15 MiB/sec
〜
Mon Jul 23 18:15:39 2018 : section_count = 79, offset = 14107393277 bytes, size = 176862384 bytes, turnaround_time = 0.25 sec, throughput = 662.80 MiB/sec
Mon Jul 23 18:15:39 2018 : done... ../baka_par ./aaa_13GB
turnaround time : 20(secs)
ついでに前回のコードでも試しました。↓つづく ## ついでに https://ideone.com/E6QH2r で同じファイルを読み込んだ時間
LINUX% time ./a.cpp aaa_13GB
strat... ./a.out /mnt/home2/pjupm/dbl/work/kinoshit/rve/cpp/final2/baka_source_kino/temp/aaa_13GB (null)
done... ./a.out /mnt/home2/pjupm/dbl/work/kinoshit/rve/cpp/final2/baka_source_kino/temp/aaa_13GB (null)
real 0m16.243s
user 0m14.024s
sys 0m2.199s
↑の実行時間約16秒と >>241 の約20秒の約4秒の差分はざっくり言うと
文字や数値をt_all_db構造体に格納するのに要した時間ということでしょうか? 読み込み2秒
全部で16秒
ほとんどが読み込み時間?
嘘つき >>243
これは >>242 のことですか?
それぞれは下記のようですが、sys=読み込みのみの時間 となるんですかね。
real プログラムの呼び出しから終了までにかかった実時間(秒)
user プログラム自体の処理時間(秒)(ユーザCPU時間)
sys プログラムを処理するために、OSが処理をした時間(秒)(システム時間) オレのとこでは
baka_parもbaka_specも
どっちも30〜32MiB/secだから同じだ
つまりほとんど読み込み時間
どっちも8分ぐらいかかる
で、そっちのは
baka_spec
turnaround_time ::= 2.27 sec ← 2秒で読み込めてる!
baka_par
turnaround time : 20(secs)
そっちでは明らかに解析処理が足をひっぱってる
つまり初回の解析処理をさぼればもっと速くなるハズ >>246
par, specともにほぼ同じですか。
すみません。話についていけてないです。。
初回の解析処理をサボるとはどういうことですか?
自分が書いたら40〜50secだったので20secですでにかなり速いと思ってるんですが、まだ高速化の余地があるんですね。 普通に考えたらこんなもん全部メモリに格納しようというほうが
普通に考えて狂ってると個人的には思うからな、それ専用の計算機ならともかく
ちなみに全部メモリに格納しようとすれば、その格納のオーバーヘッドで
さらに時間がかかることになることは予見できてる
すべてメモリにのせるDBの発想に近いが、そういうDBMSでも起動時のロードにはものすごい時間がかかる
かりにな全部データをメモリに格納しないなら
全部解析する必要はない
過去にセクションは100個ないぐらいといってたと記憶してる
仮定の話になるが、例えば1セクション読みこむのにどれぐらい時間がかかるかということになる
いまぐらいの速度がでるなら
セクションの位置とサイズだけを先に取得して
後で必要な部分のデータを再度読みこんでオンデマンドで解析しても
十分な速度がでるような気がしないでもない
(最初にどこまで解析して取得するかはとりあえず今はおいといて) で、やりたいことは、これまでのレスを読むかぎりでは
でっかいファイルの内容を画面に表示するだけだと思う
それだけのことなら実機の高い処理能力を考慮すれば
トップダウン方式で必要な箇所をオンデマンドでロードして取得する方法で十分な気がする
そのほうが計算機にも優しいし、15Gのデータを全部眺めるバカなんかまずいないだろうしな
こんな感じのことをやるのかなあとは思ってる
Ex.
データ取得の要求が3段階でされると仮定してる
@セクションの列
AXY with QQ、RRの列(入力:セクションのSEQ)
B数値の列(入力:XYのSEQ)
A) 画面の初期表示では@で十分
B) セクションを展開して表示するときはAの取得で十分
C) X、Yを展開して表示するときはBの取得で十分 >>246
解析処理が足を引っ張ってるのは
お前の解析処理が遅いから
>>248
まともに作れば解析自体は8秒で終わる >>249,250
>すべてメモリにのせるDBの発想に近いが、そういうDBMSでも起動時のロードにはものすごい時間がかかる
まさにこの発想で考えていました。
すべて構造体に格納しようかと…
> @セクションの列
> AXY with QQ、RRの列(入力:セクションのSEQ)
> B数値の列(入力:XYのSEQ)
> A) 画面の初期表示では@で十分
> B) セクションを展開して表示するときはAの取得で十分
> C) X、Yを展開して表示するときはBの取得で十分
アドバイスありがとうございます。
1stステップ →上記@のセクション名、次行にあるx/yの個数、その次のテキスト行を取得しGUI表示
2ndステップ →GUIから セクション内の数値全部 or x/yの任意の番号 のどちらかを選択し表示(上記ABをその都度fseekでピンポイントに取得)
の2段階で検討してみます。
支配的なのはBの部分なので、そこを分離すれば負荷はかなり減るのではと思います。
>>251
8秒ですか。。
そのようなハイレベルな解析は日曜大工レベルの自分には当分作れそうにないです… >>252
何をする気か知らんし、読み返す気もないが、
> 日曜大工レベル
なら他言語使えよ。今のC++は君向けではない。
一通りも出来ないのだから、普通はPerl/Ruby/Pythonのどれかだと思うが。
あとここは「ぼくのさいきょうのそふとうぇあ」のスレではないから、
実際埋め立て状態だし、全く終わる気配もないし、
別スレ立ててやるのがマナーだと思うぞ。 A.exeがB.exeを立ち上げる
A.exeがB.exeの起動時に共有メモリ先を渡すのに
その空間を指定するのはどうすれば良いんでしょうか winAPIのmemorymapedfileを調べてみたけど
winAPI便利だが触ったことないと敬遠しちゃう >>253
日曜大工とか書いてるけど、サーバー使ってやるとか言ってたから実務だと思うが
あまり初心者を弾くようなことを言うな
>>252
速度は実用レベルになりゃそれでとりあえずいいんじゃないの
ドヤりたいやつや喧嘩したいやつに惑わされるな
回答は参考にとどめて、自分でやってみてどうしてもわからないところだけ聞きに来い
スレを私物化するな >>254
プロセス間共有メモリはプラットホーム依存でありC++の範疇ではないので、続きは以下スレでどうぞ。
>>256
あなたも。
Win32API質問箱 Build124
ttps://mevius.5ch.net/test/read.cgi/tech/1510395780/ >>257
この程度のことを延々と続けられては、迷惑行為でしかないだろ。
実務なら上司に聞け、でしかないし。
最近アホが大量流入して、このスレは一気にレベルが落ちたよな。
お前らがそれについてどう思っているのかは知らんが。
お前は「プログラミング初心者」をここで飼いたいのか?
「C++初心者」はいいとして、C++は「プログラミング初心者」向けの言語ではない。
そもそも組み方も根本的に間違っている気がするが、
俺はこんな奴に教えてやる気はないし、
他の誰も指摘しないところを見ると、まあそういうことなんだろ。
(俺はソースは見てないが) 確か上級者スレってあったはず
上級者はそちらに移動し、ここを見ないで 空気読めないド初心者と、ド初心者相手にマウント取ってイキってる半角雑魚オヤジが二人で傷を舐め合ってるだけ
その二匹をNGすれば平常運転よ >>259
いやそもそもは速度が必要なのでC++選んだ(C++については素人なので、何故自分のコードが遅いかわからない)、という話
最初の質問は何もおかしくなかったよ
前スレはもう読めないかもしれんが。
もういい加減自分で進められるだろうからいちいち報告しないでほしいが STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
いつまでこの糞テンプレ張り続けるんだおい
---- テンプレ ここまで ----
>>263
なんだかんだでこのテンプレが馬鹿よけとして素晴らしく機能してたって事だよ。
それを嫌う奴が無理に剥がそうとした結果、このザマだ。
このテンプレはこのスレを極めて的確に表現しているし、C++のノリはこれだよ。
しかし、スレ検索するとC++スレって40もあるのな。正直びびったわ。
適切なスレを探すことも出来ない馬鹿にはC++なんて無理だってことでしかないが。 >>263
これか?
(専ブラでは読めないが、今はdat落ちしないので、通常ブラウザなら過去スレは基本読める)
> 743デフォルトの名無しさん (アウアウウー Sa0b-sule)2018/07/07(土) 23:53:17.73ID:HbEbhDY0a
> LINUXで15GBくらいのテキストファイルを読み込みこんでGUIを作ろうとしています。
> ファイルが大きいため速度が出せる言語で、かつGUI作成は情報量が多いと調べやすいので、まあまあメジャーな無料のGUIライブラリを使用したいと思っています。
>
> perl>>python>>>>C++ の順で経験があり、C++はあまり詳しくないですが、速度重視でC++で行こうと検討しています。
> GUIライブラリを調べているのですが、C++のGUIはあまり情報を見つけられず、めぼしいのはQtくらいしか目に付きませんでした。
> 会社のサーバのローカルディレクトリにQtをインストールしてみましたが、必要なライブラリが古かったりで、インストールできませんでした。
>
> 他に何かおすすめなGUIライブラリはありますでしょうか?
> https://mevius.5ch.net/test/read.cgi/tech/1528382412/
ならC++選んでいる時点で間違いだろ。
理由は教えてやらないが、当然そうだからこそ、適切なライブラリがない。
というか、本当に初心者でないのなら、
適切なライブラリがない=みんなやってない=地雷臭を感じとれっての。
C++で書けば何でも速くなると思っている馬鹿、最近増えたよな。何故かは知らんが。 くだらない選民思想はやめた方がいいよ、C++をベターCとしてしか使えない人でも
素晴らしいソフトを書き上げてる人は腐るほど居る
大体選民思想に走るやつってC++を実用してないやつなんだよなぁ・・・ >>265
読めるなら読んでから言えよ
>適切なライブラリがない。
>みんなやってない=地雷臭を感じとれ
俺ゲーム屋なんだけど、居た会社はどこもみんな自社でライブラリというかフレームワーク作ってる
全部地雷なのか?
お前アマチュアだろ? >>253,257
ご意見ありがとうございます。
自分にはもったいないくらいの洗練されたコードまで出して頂いてとても感謝しています。
アドバイスの通り、頂いたコードを元に自分で調べて見ます。
また色々やってわからないことろがありましたらご相談させてください。
あと、このスレはこれからも拝見させていただきたいと思います。 共有ポインタがC++に正式採用されたことで、JavaなどGC機能を持った他言語の優位性が薄れたわな。
コンパイル速度も上がったし、開発機のメモリも増えたしで、昔よりC++を使うストレスが軽くなった。
なので皆、C++に回帰してくる。 >>265
うわっ
なんだこの初心者丸出し野郎
>>266
> C++をベターCとしてしか使えない人でも
使えない
じゃなくて
いろいろと判断してそういうコードに意図的にするんだよ
そう判断する理由の例としては
互換性
パフォーマンス
コードサイズ
開発工数 / 評価工数
等々 >>267
話の内容から読む価値が全くないと分かるから読まないんだよ。
つか、初期はみんなまともな指摘してるじゃねえかよ。
ガン無視して今の有様のようだが。
> お前アマチュアだろ?
お前も無駄マウントするのではなくて、実力は投稿で示せよ。
そもそもC++用ゲームエンジンはありまくりだろ。
C++はその用途に向いているからみんな使ってる。だからそういう現実がある。
俺はそういうことを言ってるんだよ。
(日本の会社は何故かプロプライエタリに拘っているのも事実だが) >>271
>お前も無駄マウントするのではなくて、実力は投稿で示せよ。
俺は半角のコードでいんじゃね?と思ったんで何も言わんかったw
>C++はその用途に向いているからみんな使ってる
あーそういうことか
でも構文解析をC++でやるのは決して間違いではないと思うけどな 単純な構文解析を大量に行う
なんて処理はCやC++がぴったりと思う まあ新しい機能がバンバン入る言語やライブラリってのは選民思想が湧きやすいもんよ。
昔からこの業界のそういうところは変わらん。
そしてそういうものがレガシーコードを量産するという現実も変わらん。 >>272
> でも構文解析をC++でやるのは決して間違いではないと思うけどな
大昔:yacc/lex
昔:bison/flex
最近さらに何か出てたと思ったが、使う気がないので忘れた。
そもそも元が15GBあって、それを全部目で見るわけないだろ。
単純には grep -i error とか、複雑ならいちいちperl等で切り出して眺めるもの。
やってることが最初から見当違いなんだよ。
仮に15GBのテキストを開けるテキストエディタを作ったとして、
スクロールバー長が1500pxあったとしても10MB単位でしかなく、
ドラッグアンドドロップでのスクロール操作は使い物にならない。
当然、マウスホイールで数行単位、クリックで1画面単位でスクロールしても埒が明かない。
結果的に行数じか打ちのジャンプしかないんだから、sedでいい。
俺が教えてやらねえ、って言ったのはこの件ではないけど、
「誰もそういうことをやらないからそういうもの(ライブラリ等)がない」ってのはあるから、
初心者なりにちゃんと考えろって事だよ。
上記は初心者でも理解できるだろ。気が付かないのは考えてないだけ。
そんな奴は勝手に死んでよし。 >単純には grep -i error とか、複雑ならいちいちperl等で切り出して
確かそれはやりたくないって言ってたと思う
まぁ、俺もテキストのまま扱うのはどうかとは思ったけども
別に内容書き換えるわけじゃないんだしトータルでもメモリ上に残す情報は
大した量にはならないだろうから全部読めばいいじゃん、テキストは内容を理解したそばから捨てていいんだから
(用途が俺もわかってないからどっちがいいか不明だけど、初めて使うウインドウを開いたときに
ファイルアクセスと構文解析のラグを許容できるか、それとも立ち上げ時のラグを許容できるかどうか)
ってまぁ、さんざん既出なんでこのネタはもうやめようw オレのコードのエレガントさが分かるようならまだ芽はある
オレのコードのエレガントさが分かるなら、もう一人でコードが書ける
これからも頑張り精進したまえ
低学歴知恵遅れニートのいうことなんかほっとけばいい
>>275 ← こういう低学歴知恵遅れを見れば分かるとおり
相談してる相手がまずなにがやりたいのか全く理解できてない
まず知能に著しい欠陥があるからまずなにごとであれ
要件というもんが理解できないのは間違いない
オマエも人に仕事をたのむだけの立場になったらな
>>275 ← こういうバカには仕事を頼んではダメだ
ということもこのスレで学べたハズだ
コレもこのスレで得た貴重な体験だ
コミュニケーション能力がゼロのニートみたいなヤツだからな
こういうヤツは
間違いなくこっちがお願いしたもんとまったく違うもんあげてくる
つまりこんなヤツには最初から仕事頼んだり関わらないのが吉
こっちの余計な手間と時間だけがかかるからな
このスレは、色々学ぶことができる
これからもちゃんとこのスレ読んで精進しなさい sqliteはメモリ上にデータベースを構築できる。
どうせやるならsqliteに勝てるような車輪の再発明を期待したい。 >>276
ってかまじな話、正解だと思えるレスも散見されてるぞ。
無視してるんだからどうしようもないが。何がやりたいんだこの馬鹿は?
なお、俺的に正解と思えるのは、以下。(見落としあるかも)
----
773デフォルトの名無しさん (ワッチョイ e7c3-WPlw)2018/07/08(日) 23:16:50.92ID:w/p0hjmq0
テキストのパースなんてそれこそperlやpythonにやらせろよ
そんなところが速度にクリティカルに効いててゴリゴリ高速化しなきゃいけないのは作りがおかしい
866デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)2018/07/09(月) 22:41:30.68ID:Xc+Rjkat0
最低限のパースを実施して各レコードのオフセットを配列に入れて必要になった時に解析して表示すればいいだけかと
873デフォルトの名無しさん (ワッチョイ e7c3-WPlw)2018/07/10(火) 01:34:56.63ID:C7bP6ErJ0
なんかのログなんだろうけど、ログ吐く時に読み込みやすいように出し方考え直した方がいいよ
大本が変えられないならパイプ繋いでフィルタ噛まして、読みやすいように直したファイルを並行して吐くとかさ
というかまず単にSECTION_NAMEごとにファイルぶった切っておくだけで良かったりしない?難しく考えすぎてない?
874デフォルトの名無しさん (ワッチョイ e7c3-WPlw)2018/07/10(火) 01:46:08.72ID:C7bP6ErJ0
どういうGUIが必要なのかわからんから的外れかもしれないけど
ワイならSECTION_NAMEごとに集計したHTMLファイルかなんかを出力するプログラムをワンパスかけてから
後でそのHTMLをブラウザで見ることを考えたくなるんだけどそれじゃダメなの?
880デフォルトの名無しさん (ワッチョイ 4750-SFkP)2018/07/10(火) 07:31:15.21ID:wSs+8Os00
初めて開くファイルは使いやすいように変換して(キャッシュとして)保存しておいて
次回以降それを使うか
全ファイルバッチ処理で事前に変換しておくか
かな
ファイルを開く度に分オーダーかかるのは使いづらい
どちらが良いかは使い方次第で まあ、俺ならperlで15000のファイルにあらかじめパースしてぶった切って、lessで見るね。
テンポラリファイルの有効/無効はタイムスタンプをチェックすればいいだけだし。
初心者は(選択肢を思いつけないから)無駄に難しい選択をしてはまることはよくあるけど、
正解をガン無視しているんだから死ねでしかないね。
これではお前ら的にもどうしようもないわな。
嘘を嘘と(ry は当然だが、
正解を正解と(ry だな今回は。 やっぱりなコレが低学歴底辺の限界
わかるわ
所詮、低学歴底辺のドカタ
低学歴底辺のドカタは自分でログ見るらしいからな
すぐに分かるのが恐ろしい
このスレにはそんなのしかいないわ クソニートの趣味のぱちょんこん講座の邪魔されて
クソニートどもがイライラしてるのはわかるわ
クソニートのツールなんかクソニートしか使わないからな
クソニートらしい発想といっていい
まず自分がどうするありきだからな
自分以外の人間なんか関係ない
クソニート臭がプンプンする
やっぱりなニオイは隠せないわ 前スレからID追うと、このスレ立てたの15Gテキストの質問者で
ワッチョイとテンプレを失敗してる
いっそワッチョイ付きで立て直して、ここは放棄するのもありじゃないかな… 失敗してるワケねーんだよなぁ
ワザとだろ
俺TUEEするためだけに立てられたクソスレだよw やってることがTUEEとDANZAI、アホなSS未満のクズだろ
だからワッチョイは無いw 世の中のパーサーは入力としてストリームを想定する場合が多い。
一方、OSはストリームを想定しなくなってきている。
IOCP、epoll、kqueue等を想定するプログラムにとって、必要なものは、一文字入力すると状態が変わるようなプッシュ型パーサーではないだろうか。 途中で送ってしまった...
キャラポインタをビーストリングに変換したいです
マ ルチバイトトゥーワイドキャラでよい?
今やってるのだけど一切できなくて辛い
環境はウィンドウズです
エヌジーワードのためカタカナ混ぜてます >>290
C++的な回答をするなら、BSTRをラップしたCComBSTRクラスを使ったほうが楽だしドキュメントも多くていいと思うよ。 >>291
そんなのがあるんですね
コム使うのは良いのかわからんな... >>292
すでに知らないうちにCOMを使っているはずなので、今更COMを使ってよいか気にしなくていいよ。 >>285
俺は賛成。STLのテンプレもありでよろしく。
(まあ俺が賛成しても大局に影響はないが…) >>294
別にテンプレがあろうとなかろうと、スレに投稿される内容に変わりはしない、と思うのですが?
もしかして「おまじない」とかが好きなんですか?
半角氏は連続して投稿する傾向にあり、IDだけで割合に弾けるのでワッチョイは要らないと思っています あんなテンプレいらんだろ…
まさか自分が作ったとか? >>295
> テンプレがあろうとなかろうと、スレに投稿される内容に変わりはしない
ならあってもいいって事になるが、それに対する反論は?
俺はワッチョイもあのテンプレも機能してたと見ている。
実際、もう初心者要らないんじゃ、って話になってたのは事実だろ。
お前がそれに反対したのも事実だが。 >>280
ご意見ありがとうございます。
SECTIONごとの切り替え目安は下記の時間でSECTIONを切り替えながら別のGUIソフトでマウスを使って改善していきます。
@数値の数が一桁〜二桁程度だと数分で切り替え、
A数百〜数千レベルだと数十分〜数時間で切り替え、
Bそしてまた再実行しファイルを読み込み@に戻る
初期の小さい規模ではSECTION数が数十個で、各SECTIONの数値の個数はせいぜい数百レベルなのでSECTIONの切り替えが頻繁に発生します。
そして@〜Bを回すのが数十分〜数時間くらいでそれをくるくる回します。
数ギガレベルになるのは終盤になってからです。
という感じなのでファイルの再生成が頻繁に行われ、かつGUIでマウスで改善していくので
マウスが手放せず解析表示もGUI操作が必須になる、という感じになっています。
小さい規模では特にSECTION切り替えが頻繁に発生するのでファイル分割で管理がわずらわしくなるのを避けたい。
まずここに重点を置き、そうすると大きい規模では読み込み時間がネックになるので高速化で対応しよう。
という状況で現在に至っているところでした。 >>298
死ねよゴミ。
俺はお前が正解を全部ガン無視したことを咎めてるんだよ。 >>293
そんなもんなんだ
Char**→LPCWSTR変換ってsetlocale使う方法しかない? >>297
>ならあってもいいって事になるが、
そうではなく、すでに在るこのスレを放棄する必要はない、と主張したつもりですが
同様に、例のテンプレが張ってあるスレの存在下で、新たにテンプレなしの新スレを作る必要もない、と考えます >>300
setlocaleは関係ない。setlocaleは、C関連の設定をすべて変えてしまうので、ここでは呼ばないほうがいい。
MultiByteToWideChar() で可能。
出力用のLPWSTR バッファは、スタックなりmalloc, new, std::vector<wchar_t> なりで確保したヒープメモリを使い、
受け取ったLPWSTR バッファの中身をCComBSTRのインスタンスにコピーするのがいいと思う。 >>301
> そうではなく、すでに在るこのスレを放棄する必要はない、と主張したつもりですが
じゃあそう書けよドアホ
そしてその場合は285に安価しろ
まあとにかく、俺は新しくスレを立て直すことに賛成だ。
あのテンプレも機能してたと思う。
そして15GB君と半角キチガイには何も教えてやる気はない。
スレ住民が出来ることは、正答例を提示することのみであり、
今回はこれは複数人から十分為されている。
ゴミなのは質問者および半角キチガイ馬鹿だけであり、
ワッチョイが意図的に落とされたことにより荒らされていると懸念されるのなら、
このスレを破棄して新しくワッチョイスレでやり直すのは極めて妥当だ。
んで、ついでに正解提供者がHDDの速度について知らないようだから教えておいてやる。
サーバーのHDDは一般にRAIDになっており、スループットだけはいくらでも上げられる。
詳しくはググッた方が分かりやすいからそうしろ。
なお一般PCも今時はRAIDを標準装備しているが、
1. そもそも複数HDDを接続しない
2. マザー等HDD以外の故障の場合に余計に死ねる
ので一般PCでRAIDを構成することはあまり無い。
また、SSDが速いのはランダムリードであり、
シーケンシャルライト(ログ吐き)の場合はHDDの方が速かったりしたはず。
質問者と半角キチガイは死ねでしかないが、
正解提供者が疑問に思っていることがあれば、知ってれば答えてやるよ。
スレの質を上げる為に努力した奴らは報われるべきだと思うから。
今回は質問者が悪すぎた。これはご愁傷様。 オレが強いワケがないからな
クソニートどもがよわっちいだけだからな
クソニートどもが社会人に勝てるワケがない
クソニートどもがとてつもなく弱いワケ
その自覚がないのが恐ろしい クソニートどもの戯言が正解だって()
身の程知らずもいいところ
クソニートどもはクソニートの狭い世界で
すべてが完結してるからな
その自覚がないから救いようがない このスレに相談してくる人間は
クソニートのアドバイスなんか求めてないわけ?
わかる?
オレみたいなプロフェッショナルに回答を求めてるわけ
クソニートのテキトーな戯言なんかだれも求めてない
わかった? >>303
>あのテンプレも機能してたと思う。
根拠は?
>ワッチョイが意図的に落とされたことにより荒らされていると懸念されるのなら、
>このスレを破棄して新しくワッチョイスレでやり直すのは極めて妥当だ。
新しくスレを立てても、そのスレにて半角君や150G君が発言を継続するのであれば、事態は変わらないのでは?
月並みな話だけれども、単にスルー力が足りないだけなのでは?
5年、10年とスルーし続けることも必要な場合はあると思います >>307
なるほどお前とは話が通じないことは分かった。
お前が嫌われるのも納得だ。
> 根拠は?
先に「機能してなかった」根拠を提示してみろ。
> 事態は変わらないのでは?
ワッチョイがあればここまで酷くはならない、というのが彼の見方で、
俺もそう思う、ということ。
というかマジでお前話の内容について来れてないだろ。
無理して食いついてこなくてもいいぞ。邪魔でしかないから。 もうねクソニートが必死でしょ
すぐにクソニートなのはレスですぐにバレちゃうからな
コイツの脳内ではインフラとソフトウェアすら組織で分離されてないみたいだからな
クソニートの自作パチョコンの世界を
そのまま脳内で再現してる >>309
>先に「機能してなかった」根拠を提示してみろ。
私は「機能していた」とも「機能していなかった」とも主張していませんが
あなたは >>303 「機能していた」と判断しているのであれば、その理由もおしえていただけませんかね
>ワッチョイがあればここまで酷くはならない、というのが彼の見方で、俺もそう思う
ワッチョイは有効期限が長すぎるし ID とちがって専用ブラウザでの機能が充実していないからね…
私は ID で快適にスルーするべきものはスルーできていて無問題なんですけれどもね HTML出力を正解だと思ってるやつや
size_t使ってる場所で出るコンパイルエラー程度で「動くコード書けよ」とか
恥ずかしいこと言った上に、謝りもしなかった初心者が
偉そうに仕切ってるスレって・・・w >>309
他のスレにはないのだから要るって主張してるほうが根拠を示すべきだろ。 >>318
テンプレは俺が荒らしたから出来たものだし、あのテンプレがあると俺は恥ずかしくて荒らせない。
そこら辺の経緯を知りたいか? >>319
それなら自分の机の上にでもはっとけばよくね? すっぽすっぽ先生の日本講演の日なのにくだらねえ話ばっかりだな ターミナルでタブキー押すとディレクトリやファイル名が補完されますがプログラム上でそれを起こすにはどうやればいいのでしょうか >>311
> 私は「機能していた」とも「機能していなかった」とも主張していませんが
ならまずお前が俺に絡んできた理由を教えろ。
といってもお前は相当のコミュ障のようだからどうせトンチンカンな答えになるだろう。
続けても意味無いから答えを書いておいてやる。お前には会話の常識がないんだよ。
既に言ったとおり、
> そうではなく、すでに在るこのスレを放棄する必要はない、と主張したつもりですが
なら俺にではなく、285に対してレス『しなければならない。』
そしてこの状況で俺に対して
> >あのテンプレも機能してたと思う。
> 根拠は?
と問いただすのなら、常識的にはお前は「機能してない」と思っていると仮定される。
逆に、この状況で単に
> 私は「機能していた」とも「機能していなかった」とも主張していませんが
という、単純に理由が知りたいだけだというのなら、それを明示『しなければならない。』
(それ以前に、普通に空気読める奴なら、不要不急な質問をここでは控えるが)
お前は相手に自分の意図が正しく伝わるように書けてない。
だから無駄に脱線して空回りし、話が進まない。だから嫌われる。
コミュ障の典型的パターンだ。「自分はそう言ってませんが」で全て通ると思っている。
そうじゃない。
意図を正しく伝えて会話を成功させる努力義務は相互にある。お前は全くそれが出来てない。
おかげで俺は無駄な話を書かされまくってる。大迷惑だ。
というわけでQZは話にならないのでとりあえず放置だ。
>>316
お前は当然「あのテンプレは意味無い」と思っているんだよな?
では逆に聞こう。
何故あのテンプレを剥がしたがっている奴がいるのだと思う? >>327
>そしてこの状況で俺に対して
(>>303)
>>>あのテンプレも機能してたと思う。
(>>307)
>> 根拠は?
>と問いただすのなら、常識的にはお前は「機能してない」と思っていると仮定される。
常識とはなんですか?
かりに、あなたのいうところの常識が妥当なものであったとしても、自分で「仮定」といっているんですよね?あくまでも仮定ですよね?
仮定というからには、仮定が成立しない場合もありうるんですよね?
私は、
>>303
>あのテンプレも機能してたと思う。
という結論を、どういう推論を経て導いたのかを聴きたかっただけなんですが。
>単純に理由が知りたいだけだというのなら、それを明示『しなければならない。』
どうして? >>329
テンプレがあると俺が荒らせないからに決まってんだろ。 タブキーによる補完の仕組みは
compgenを調べればすぐに分かる
つまり
これこそ
ググレカス >>329
回答は既に327に書いてある。
何度でも読み返せ。
>>328
まあお前らゆとりはその程度だとは思っていたさ。
おそらくお前の戦略は、俺が証明できないから無効だと言い張ることだろ。
だからこそ、お前らは先に言い出せない。必ず俺に先に言わせようとする。
それで、俺が証明できたら、どうするつもりだ?
実は逆説的だが証明自体は簡単なんだよ。
嫌がっている奴がいること自体が、効いてる証拠なんだ。
わかるか?
お前があのテンプレを剥がしたがっているしたら、例えばそれはお前にとって不快だからだ。
不快だと思う奴は、そういうスレに来ない、または来にくくなる。
本当に訳の分からないテンプレを貼られてたら、アウェイ感が出るだろ。
そしたら入って行きにくくなるだろ。
だから、積極的にテンプレを改変しようとする奴がいること自体、効いてる証拠なんだよ。
勿論>>1すら読んでいないゆとりレベルの馬鹿>>260には効かないが。
とりあえずかなり長いことあのテンプレは貼られていて、それで質は保たれてた。
最近積極的に剥がし、そしてワッチョイも剥がされてこのザマだ。
ここは元通りに戻して様子見するのが妥当だよ。
長期的影響を考慮できない馬鹿はここは黙って見ているべきなのさ。
お前らはすぐ老害老害と言うが、リアルはさておき、ネットは老害が蔓延れるほど歴史がない。
お前らはもう少し、己の無能さを自覚し、知識がない分野については自重する分別を持つべきだ。 2ch全体が、何故か「テンプレは不変」で纏まってるだろ。
俺はこの経緯/歴史は知らないが、可能性があるのは、
1. 全員がテンプレの効果を理解できる知能があって、自然にそうなった
2. どこかで話し合いがもたれて、そうなった
3. 試行錯誤され、結果的に遺伝的アルゴリズムの淘汰により、そうなった
の3つだ。
ひろゆきは「昔は賢い人しかいなかった」と言うから1だと主張するかもしれんが、
俺はこれはさすがにあり得ないと思う。
>>267みたいに無駄に噛みつきまくる馬鹿な奴は、どこにでも居るから。
(噛みつくのではなく、投稿内容で知識レベルを示すべき)
さりとて2ももっとあり得ないから、おそらく3だと思っている。
つまり、テンプレにいちいち不満があるからといって改変許可していると収拾がつかず、
結果的にそういうスレは質が下がり淘汰されてきたと見ている。
そして2ch全体がそう染まったと。
俺自身は「嫌なテンプレを作る」のも効果がある、という考えだ。
それをいちいち外されるようでは駄目なんだよ。効果が無くなるから。
そして、その効果が無くなる=テンプレを自由改変するスレは淘汰されてきたと見ている。
とはいえ、お前らはこれでは納得いかないだろう。
なら、スレ割って実験してみればいいだけだ。単純な話だ。
>>285の言うとおり、ワッチョイ付きで立て直せばいい。
そしてテンプレがいると思う奴は、投稿すればいい。少なくとも前スレ136まではそうだった。
逆にテンプレが要らないと思う奴はこのスレを引き続き盛り上げればいい。
俺はワッチョイ+例のテンプレ付きのスレにしか投稿しないことを約束する。
それでどっちが盛り上がるか勝負すればいい。分かりやすい話だ。
また逆に、これを避けること自体もまた、
「勝てる自信がない」という意味でテンプレが有効だと裏付けていることに気づけ。
ということでいいかね?
何なら俺がスレ立てて割ってやるよ。それで勝負すればいいだけだ。
断る理由も、お前らにはもうないはずだ。 なおあれは俺が作ったわけではない。
俺も当初意味不明なテンプレだと思ったが、しばらくすると、
確かにあのテンプレはこのスレの状態を極めて的確に表していると気づいた。
つまり、あれを「クスッ」っと感じれる奴だけ集まれ、ってことだ。
お前らがあれを剥がしたがっているのは、違和感ありまくりだからだろ。
その「違和感」こそが、効いている証拠なんだよ。分かるか?
ただこの際、効いている効いてないは大した問題じゃない。
スレ割って、両方のスレがお互いに競うことが重要であり、それが直接的にスレの質の改善に繋がる。
だから、やればいいだけの話なんだよ。
>>333
ワッチョイ無し例のテンプレ無しなら、このスレを使え。
新しくテンプレが欲しいのなら、みんなで話しあって立て直すんだね。
それが妥当と思えなければ、俺が従来通りのスレを立てて様子見してやるよ。 主観的、思い込みだらけでなんの根拠も示せてない。やり直し
あとワッチョイについてなくても無問題と言ってるのはQzだけだ IDは日毎に変わってしまうので自分の発言を見直したい時に不便。
ワッチョイ便利よ。 >>337
まあどうせそう連呼するとは思っていた。
ならスレ割って証明するしかない。
勿論反対はしないよな?
とりあえず数日様子見して、話が纏まらないなら俺がスレ立てるよ。
それまでに、「機能してない」と主張する奴は「例のテンプレがある」スレには投稿しないと約束してくれないかね?
俺の逆で。
それで勝負だ。
「例のテンプレ」を支持する集団と、剥がしたい集団で、
どっちがマトモにスレ運営できるか、白黒つければいい。
>>329
QZ、お前もな。
ここまで絡んできて、僕は質問しただけです、は通らないぞ。
旗幟鮮明にしろ。 エラー落ちすると自分マーク消えちゃう専ブラあるからなあ メタプログラムとかにしたら絶対ダメだ
知恵遅れなんかがここぞとばかりに
テキトーなこと書き込めるからな
メタプログラムとか知恵遅れが一番参入しやすい
このスレがなんで低学歴知恵遅れが多いか
その理由がココにある まじめに議論したいなら
まずクソニートや低学歴知恵遅れ
そして底辺ITドカタをこのスレから排除すること
まずこっから このスレはバカの自覚がないバカが多い
だから絶対にバカが治らない
一番たちがワルイ
排除するのが一番
そういうことだ >>346
ご高説ごもっともです 深く感じ入りました
以降も発言を注視させていただだきたいと思いますので
お手数ではありますが 固定酉をつけていただけませんか?
ご勘案のうえ ご配慮いただけますようお願いいたします テンプレ
このスレは質問や相談にプロフェッショナルが答えます
クソニート、低学歴知恵遅れ、底辺ITドカタの回答の書き込みはお断り
コレでいい >>339
>旗幟鮮明にしろ。
人間の集団を敵か見方かのいずれか一方に分ける、という人間が自然に持っている心理的限界を常に自覚しなければならないのです ここがバカ用の隔離スレだからな
他のスレに迷惑かけないようにしろよ >>350
相変わらずお前は話が通じないな。
そして論点そらしか。お前もいつの間にパヨクになったんだ?
質問を変えよう。
お前は例のテンプレについて、「機能している」と思うのか、「意味無い」と思うのか、どっちなんだ?
>>295を読んだら「意味無い」と思っていると捉えられるのが普通だが、
お前的には違うつもりなんだろ。
ならさっさと答えろ。
ここまで絡んできて、まさか自分の意見がないとか、あり得ないよな? 相手と話をしたいなら、普通は表現に配慮するものだ
職場や学校でいつもこうやって相手にけんかをふっかけているのかな? このスレの低学歴知恵遅れは
表現の配慮以前に質問者つまり相手がいってることを理解できないからな
当然、コミュニケーションは成立しない
それ以外にもイロイロなものが欠落している
知能に著しい欠陥があると同時に社会性もない
クソニートヒコモリ特有のレスパターンといっていい
2ちゃんねるにうじゃうじゃいる登校拒否児になったまっま高齢クソニートになったようなヤツのレスパターンそのまんまだからな
精神的にも幼い
で、質問内容となんの関係もないなんの役にも立たない自分が知ってるしょうもないどーでもいいこと(つまり情報価値ゼロ)を
スレに書き込んでオナニーしてるワケ
つまりな社会と接点のないこのスレのクソニートはコレで社会と接点がもてたと錯覚してるワケ
カンペキなプロファイリングをするとこうなる
そうクソニートヒキコモリはどんだけ自分がゴミでクズな存在かその自覚をもてる日はこない
だからクソニートヒキコモリはずっと引きこもってる
結論はこうなる 図星なんだろ
素直になりなさい
クソニートがまともな社会生活を送ってる人間に
勝てるワケがない
クソニートはどんだけ自分がゴミでクズなのか
その自覚をもつのが先だからな 今回質問してたヤツとコミュニケーションが成立してたのは
オレだけだったからな
その事実がすべて物語ってる
クソニートしかいないこのスレから
クソニートを排除するのが先というのが
よおく分かったからな オレはクソニートをこのスレから排除する
クソニートの居場所はもうない >>343
ETについてここに色々書いたことある者だけど
ドヤりたいだけの馬鹿は確かに多い(ここに限らず)、けどそういうやつは見たらわかるよ
真面目にやってる人もたまにいるから一緒くたに否定しないでくれ 面接官に「お前とはコミュニケーションが成立しない!」と罵ってしまったとか ただ俺も、まともにメタプログラミング実用してない癖に「今時のC++はメタプログラミングが主流」みたいな頭悪い大嘘ぬかす馬鹿は
ここから出て行くどころか今すぐプログラミングを辞めてほしいわ
どれだけ周囲に迷惑かけ、C++の発展を邪魔してるのか自覚してほしい こんなガイキチのロートルを雇ってくれる会社なんかないな ここ、いつから身の上相談スレになったの。話題を変えたい。
EASTL使ってる人いる? >>377
検索してみたけど、C++17で良いのでは?
足りなければBoostで。 このスレのクソニートどもは
C++とかいってる前にな
自分の将来を心配したほうがいいわ バレてないと思ってるかもしれないけどな
チョンバレなワケ 低学歴がいくら低学歴を隠そうとしても
書き込みですぐにバレる
クソニートはいくらクソニートを隠そうとしても
書き込みですぐにバレる
残念なことにな
当然、本人たちはそれに気付くことはできない
バレてないと思ってるのは本人たちだけだからな >>377
何度か話題に上ってるけど使ってないな
てか何のために使ってるのか逆に聞きたい まあとにかく予定を言っておく。
俺は8/1以降に『完全に従来通り』のスレを立てる。
つまり、ワッチョイあり、例のテンプレあり、スレタイも不変で、part138とする。
従来スレがいいと思っているのならそれ以降このスレ廃棄で合流しろ。
あのテンプレが気に入らない等、従来スレよりも良いスレが作れると思っている奴らは、
可能であればそれ以前にこのスレで話しあって、ワッチョイ、テンプレ、スレタイ等も決め、
新しいスレを立ててそっちに移住しろ。
それでその新しいスレが賑わい、従来スレが過疎って落ちるようなら素晴らしい。
この方式(フォーク)の特長は、誰も損をしないことだ。
最悪、従来通りのスレは手に入る。
上手く行けばそれよりよいスレが手に入る。
この手の争いはフォークで解決すべきだというのが、OSS界隈では常識でもあるし。
Part138が存続している限り、俺は君たちが新しく立てたスレには投稿しない。
これは約束する。
俺は君たちにはスレ運営能力なんて無いと思っているが、
もし君たちの新しいスレが成功すれば、俺が過小評価していただけであり、
これくらいのペナルティは受けるべきだ。
ただし逆に、新しいスレを立てた連中は、少なくともそのスレが存続している限り、
従来スレには来るべきではないとも思っている。
これがフェアというものだ。これは君たちの自己に対する過大評価へのペナルティとなる。
だからQZにもその点を問いただしている。
当たり前だが、自由には責任がつきまとう。
お前らが成人しているのなら、自分の行動には責任を持て。
どっちに付くかは自由、したがってその結果がどうなろうとも全てお前の責任だ。 EASTLをVS2017とwsl+gccで試した限りでは、あまり速度面でのEASTLの恩恵はない。
EASTLを使うと、知らないうちにstdのSTLに依存してしまっているコードに気づける利点があるといえばある。 >>385
スルー力が不足しているだけなのに、また余計なことを… >>340
複数の端末を使っている場合は専ブラを使ってても自分が投稿した投稿を統一的に管理できない。
出来る専ブラもあるんかな? >>386
すでに言われてるけど最近のコンパイラと最近のC++なら当時の速度面でのデメリットは結構解消されてるだろうし
ゲーム専用機向けの最適化がなされたものをコンパイラも優秀なPCで使う意味があるのかなと思ってね
まぁ両方を眺めるのはもちろん勉強になるだろうけど >>388
組み込みの場合はまずいことが多い。組み込みは大抵stdもどきなので。 >>385
結局自分が気に食わない奴らは出てってもらってスレ継承させないと言ってるだけに聞こえるが。
自分の意見がそこまで正しいと信じているなら、part138とせずに新たに1から振り直したスレを作ったらどうなんだ?
きっと賛同者がついていってくれるよ。 >>397
「一人一票」を技術的に実現できないから無意味 実住所と氏名を晒し、郵送による本人確認、
投票用紙を送り、記名投票を実施する >>399
なるほど
メールアドレスを晒して、というのはアリかもしれない あーまあいいや、ちゃんと回答する気になったから書いておいてやる。
なお396は俺な。
>>394
良くも悪くも、俺が立てるスレは『完全に従来通り』だからそのままで行く。
> 結局自分が気に食わない奴らは出てってもらってスレ継承させないと言ってるだけに聞こえるが。
お前も相当のアホパヨクだな。
俺が言っているのは、『従来通り』が嫌な奴は出て行って新スレを作れ、
もしそのスレが成功するならフォーク成功だ、ということ。
『自分が気に食わない奴ら』ではない。
そういうところがお前みたいなパヨクの駄目なところだ。
反対の反対になっているし、論点のすり替えを平気で行っている。
こういう、強制力を発動できないところで意見対立した場合、
現行はフォークで決着するしかない。だからそれを行う。
お前に良い案があるなら堂々とフォークすればいいし、そのブランチに賛同者は付いていくだろう。
俺は特に改善点を持ち合わせていないので、従来側のブランチは俺が担当する。
>>397-398
相変わらずQZは回答なしか。お前も相当ずるい奴だな。
まあそれはさておき、
> 一人一票
ってのは仮に実現できたとしても意味がない。
フォークが成功するかどうかは、アクティブコミッターをどこまで獲得できるかであって、
つまりここで言うと正しく回答できる奴、それは実力と時間も含めて、がどれだけどちらに付くか、
そして結果的にどちらのスレの方がマトモに機能するかであって、
ROMの票があったところで意味がないからだ。
だからスレ割ってどちらが繁盛するかがつまり投票なんだよ。それがフォーク。 わかるはずがないのに分かっちゃった気になるからコケるんやぞ パヨチョンもクソニートも邪魔
排除が適切
適切な排除が必要 >>401
結局テンプレの必要性は証明できないのに従来通りだからで押し切るつもりか。
スレ分割したら従来タイトルとスレ番継承したほうが圧倒的に有利なのは明らかだろう。なんの検証にもならない。馬鹿なんじゃないか? >>406
テンプレが出来た経緯を知ってるか知らないかだろな。 >>406
少なくともアクティブな奴はここを読んでいて経緯は知ってる。
さらに8/1迄の先行件を与えている。
それ以上何が欲しいんだ?
従来通りなんだからスレタイとスレ番は継承するに決まっている。
新しいスレが同じスレタイとスレ番なら紛らわしいだけだ。
見た目分かるように何か変えろ。それは後発の義務だ。
お前が納得してない「テンプレの必要性」を俺はフォークで証明すると言ってるんだよ。
だからお前があのテンプレが悪い方向に寄与すると主張するのなら、
それを外せば勝手にスレは改善し、みんなそっちについて行くんだろ?
試してみろよ。
お前自身が「俺が気に入らないことをやるな」と言ってるだけなんだよ。
お前の考えが正しいことは、お前自身が説明しろ。
そしてどちらのスレが使われるかが、投票になる。
非常に民主的に決まる、良いやり方だと思うぜ、フォークは。
或いは他に良いやり方があるというのなら、提案してみろ。
俺は俺なりの説明はした。
あれで納得いかないのならどうやっても平行線だと分かっているから、
俺はフォークしかないと判断している。
お前は結局文句言ってるだけだ。
というかこの話も同様に平行線なので、もうこれくらいでいいか?
いずれにしても俺は8/1以降に『完全に従来通り』でスレ立てる。
それをどう捉えるかは君らが決めることだ。 争いとは無縁そうなはちみつ餃子さんに仕切ってもらえばいいんじゃないのか。 従来通りで良いなら、こんな大騒ぎしなくて良いだろう
いつものようにスレを使い切りそうになってから立てる
住民も変わらない。内容も今まで通り
これに不満な奴は、己の作りたい趣旨にそって
新しいスレを立てれば良いだけ >>410
> こんな大騒ぎしなくて良いだろう
お前がな。
俺は従来通りで立て直そうとしている。
必死に抵抗しているのは、例のテンプレを相当嫌っている奴か、
ワッチョイがあったら困る奴だろ。
従来通りでいい奴は、反対する理由がない。 テンプレ登場人物で煽ったやつが俺なんだが、もしかして煽られた奴もここにいるのかい? >>408
こっちはそんな条件じゃなんの検証にもならないと主張しているのに、フォークで証明すると繰り返すばかり。もはや反論になってない。
結局"おまもり"の有効性なんて証明できるわけがないから公平なふりして無理やり押し通そうとしている。
非論理的で話にならん。 この暑さでとうとう脳がやられたキチガイが出てきたなw c++やってるやつは案の定融通の利かない頭きちきちの奴ら何だろうな
テンプレがどうしたって言うんだか >>411
ワッチョイ付きでいいよ。賛成する。
それが従来通りって意味であってる。
これでいい? どの板でもスレの立て直しはたまにある
でも、余程理不尽なことがない限り新しいスレに人は移動しない
テンプレがないとかスレの番号が間違っているとかいう理由で人は移動しない
嵐が変なテンプレをつけたりおかしなスレタイに改変されてたら移動するぐらい ぶっちゃけどっちでもいいしどうでもいいんだけどね。 >>409
争ったら駄目なんだよ。 交渉すべき。
だが、どうせこういう手合いは何を言っても聞きゃしねぇから無駄。 >>413
そうそう、キーワード「お守り」「非論理的」、いいですねえ >>413
>>419
>>420
ではお前らなりに論理的に検証になる方法を提案し、実行しろ。
「出来ないから出来ない」というのは止めろ。
>>417
元々はワッチョイの話だったのに、
都合が悪くなったからといってテンプレのみの話にすり替えるのは止めろ。
>>416
従来通り=ワッチョイあり、例のテンプレは2に投下。
part136の1+3相当。 なんでも良いけどC++の話題やれよ。
戯言は無視でええ。 クソニートを駆除するために
はよバルサン焚けよ
こいつら害虫だからな ちなみに知恵遅れどものテキトーな回答のどこがおかしいか
オレはすべて回答してる プッシュ型スキャナ/パーサーはつなぎこみが楽だし、C++のテンプレートで使いやすい。
C++ Wayの一つとして研究されていいはず。 そこらじゅうで暴れてるな
半角ニート
初心者のくせに強がっちゃって >>353
>お前もいつの間にパヨクになったんだ?
これは興味深い、>>350 のどこに、パヨク=馬鹿左翼、を感じたのか、ちょっと教えていただけませんでしょうか? C++掲示板も終わりか。
糞なくせに自己主張だけは一人前のお坊ちゃまばかり。
メスもいるだろうが...
あんまり糞な事言ってると、後はわかってるだろうな クソはただのクソ袋
コイツラはただのウンコ製造機だからな
レス見ればすぐに分かる クソニートどもがなんで
こんなしょうもないスレの存続で必死なのか分かるだろ
居場所がココしかないから
現実逃避の場所がココだけだからな
簡単簡単 イカれを演じて暴言吐いてないと日常の不安に耐えきれないんだろうな……
なんかひどく可哀想な人だ…… デストラクタで
型Tのメンバ変数Aのデストラクタ(cout等記述)が呼びされるはずなのに
型Tのメンバ変数Aと同じアドレスを持ったデストラクタ(解放だけ行う)が呼びされるんだが
こんなバグ何が原因かわからないんだ助けてください
もちろん型Tのデストラクタは一種類しか宣言してないし
virtualもつけてるんだが… Linuxでベースクラスで持たせてて元の型にキャストしてたりする? C++で今まで作ったものってなんですか?
自分はとにかく競プロしかしてないので、なにか作りたいんですけどC++という言語でしかできないことがあまり思いつかなくて >>439
ありがとうございます!
系統で答えてもらって助かります >>438
「できること」という意味では C と大差ないわ。
でも、プログラムの部品 (ライブラリ) に高度な抽象化を被せることが出来る。
要するに高レイヤでは楽できる可能性が高い。
レイヤを分ける必要もないような小さなプログラムでは
ありがたみを感じにくいかもね。 >>441
ありがとうございます
確かにC++はそういう要素大きいですよね!
そこがいい部分で好きなんですけど、やっぱり難しい部分ですよね 上のほうで、唇がメンタイコの欲深そうなのがいるな。
2chに引っ込んでいろや。屑が 明太子はたらこのこと
唐辛子を塗したやつは辛子明太子 アルゴリズム辞典みたいなものを手元に置いときたいんだが、最も支持されてるのってどれ?
・網羅性が高い
・支持されている(売れている)
・日本語版がある
・コード例はあってもなくても良くて、あるとしたら C/C++ か擬似コードで
という条件で
テーマ別に「どれとどれとどれを持っとけばまず問題ない」という言い方でもありがたい
とにかく網羅性を重視してる 会社でC++書くことになったんですがコードが(ダブル)ポインタの嵐で読みにくいことこの上なくて辛いです
他にもstring使わずにchar配列だったり、vector使わずに配列だったり
Cのスタイルで書ける部分はできるだけCのスタイルで書くほうがやはり好まれるものなのでしょうか
前に個人でちょろっと書いたときはもうポインタ使わなくて済むならできるだけ使わないように!なんて思いながら書いてたんですが 色々な事情があるのかも
Cからの移植とか
小規模だとヒープはトラブルの元なので極力使わないとか
そもそもヒープが無いとか >>448
ポインタ使わなくてもイテレータの嵐を渡り歩いたり
スマートポインタが何をしているのかを理解するには
ポインタを使う場合のノウハウ知識が必須だよ
stringやvectorを避けている箇所にはそれなりの理由があるから
極力思い込みを排除して状況をよく見たほうがいい >>447
合計\7,000--
珠玉のプログラミング 本質を見抜いたアルゴリズムとデータ構造 | ジョン・ベントリー, 小林 健一郎 |本 | 通販 | Amazon
ttps://www.amazon.co.jp/dp/4621066072
O'Reilly Japan - アルゴリズムクイックリファレンス 第2版
ttps://www.oreilly.co.jp/books/9784873117850/
C言語による最新アルゴリズム事典の詳細情報 : Vector ソフトを探す!
ttps://www.vector.co.jp/soft/data/prog/se002453.html >>451
ありがとうございます。
最初のも辞典的なものなんでしょうか。
複数冊持つならばテーマ毎が良いかなとも思いましたが、特定のテーマに集中したものだと翻訳されているものが少ないのかもしれませんね。
2つ目と3つ目が部分的に補完しあっていることを期待して、両者とも購入しようかと思います。 the art of computer programming
numerical recipes
コレしかないわ >>451
「C言語による最新アルゴリズム事典」はこないだ改定されて「C言語による標準アルゴリズム事典」という表題で売ってるぞ。
http://amzn.asia/cgZYRrQ
ロングセラーになりすぎたせいで「いつまで最新やねん」というのは常々言われづづけてたからなぁ。 >>448-450
多分そいつは、Scott Meyers を知らないし、
ほとんどの言語に「Effective 何々」があることも知らないのだろうw
そいつに、Scott Meyers を知っていますかって聞けば?
プロで、江添亮とかScott Meyers を知らん奴は、いない stringやvectorはヒープなので、呼び出し回数の多い関数で毎回インスタンスを作る場合は処理時間に注意したいところ。 まあ状況によるわなー。
後から伸長 (または縮小) が必要ないような固定長のデータを std::vector に入れるのは豪華すぎるので、
避けれるなら避けたいということは有りうる。
それでも今どきなら std::array を使って欲しいけど、
古いプログラムをツギハギしながら使ってるような場合にはなかなかそうもいかない事情があるのかもしれん。
単純には判断できないので、わかんないことはそれを書いてるやつに聞けとしか言いようがないんじゃない? stl使うと同バージョンのライブラリを実行環境にインストールするという考慮も増える やっぱり通になると、明太子ひとつ、辛子抜きで・・・とか注文するんだろな。 >>462
第2刷買ったっけな。役に立ったと思う。 ポインタの件ですが参考になりました。まぁこっちはほぼ初心者で相手はベテランの上司なので何も言えない聞けないってとこですね
stackoverflowとか読んで生ポインタあんま使うなスマポ使えオブジェクト使えるときは使えみたいなこと書いてあるの見るとこれでいいのかなって思いますねええ std::unique_ptr は実行時の速度ペナルティもほとんどないので、避ける理由はあんまりないよな。
例外がとんだ時のロールバックについても面倒なことを考えなくて良いし。 たぶん、Scott Meyers とか「Effective 何々」とか、知らんのだろ
たぶん正常に動作する、過去の資産を持っていて、それをコピーして使う作り方なのかも
現場でよくあるのは、サンプル欲しいと言うと、過去のソースコードを持ってきて、
これは動くから、そのままコピーして使って下さいと言われる
新しい事をしようと思うと、環境構築やらで、動かない部分が出てくるので、非常に面倒
それに過去のソースコードは、あちこちで使われているから、バグが少ないという実績があるけど、
新しく作ったものは、バグ出しが大変。
安定するまで、かなりの期間が必要
よほどの理由がない限り、新しく作らない >>451
どれか一つで良くね
ほとんど被ってるっしょ
あえて選ぶならアルゴリズムクイックリファレンス
網羅性ってヤツを追及するなら、同じようなもんいくつも買うんじゃなくて自分で言ってるようにテーマに特化したものを買うしかない
名前忘れたけど文字列アルゴリズムのアレとか >>447
Knuth の 「The Art of Computer Programming」もその条件に当てはまると思う。 圧縮アルゴリズムなんか、本で憶えたんじゃなく
FAXだとかモデムみたいな具体的なブツで憶えたな
その他のアルゴリズムも単行本より雑誌で
憶えたのが多いし >>468
これ?
高速文字列解析の世界――データ圧縮・全文検索・テキストマイニング (確率と情報の科学) | 岡野原 大輔 |本 | 通販 | Amazon
ttps://www.amazon.co.jp/dp/4000069748
「高速文字列解析の世界」サポートページ - daisuke.okanohara
ttps://sites.google.com/site/daisukeokanohara/iwanami_string_world そのジャンルは大体の場合は条件固定じゃないからツール類を使ったほうがいい >>447,451,468
蟻本の参考文献揃えるのがおすすめ >>470
文書圧縮について手元に置いていつも参照しているのは
https://www.amazon.co.jp/dp/478983672X/
今は、jpg の本が欲しいと思っていますが、なにかいいのはありますか? C++極めたいんだけど、どうすれば極められる?
仕事はJavaScriptが主です
今はアルゴリズムの本読んでるのですが、個人的にはC++ドラフトの間違いを指摘できるレベルになりたいです >>477
oracle Solaris Studio の開発者になるとか
ホワイトスミスに弟子入りするとか
じゃね? >>478
いや実際C++使ってる職場少ないし、どうやってレベルを上げればいいのか分からん
オープンソースを読むくらいしか思いつかない
>>479
ジョークはいい >>476
jpegが赤に弱いなんてのも
ギョーカイの人とのおつきあいで
ホーソレデ氏になった >>480
読んでばかりじゃなくて自発的に自分で実際に書いてみないことには、いつまでたってもたいして身に付かないだろう。
極めたいなら、言語仕様の一つ一つを実際に使ってみて具体的に役立つケースや制限、制約、限界を体感して、メリットデメリットを洗い出すくらいのつもりで試してみたら? >>482
嫌‥
>>484の言うとおり実践的な立場かな
>>484
それはもちろん分かる >>485
まずは仕事で使う自作ツールをC++で書くとか
千里の道も一歩から 自作ツールはまず、スクリプト言語でやってみて、速度面などで不満があった時だけC・C++に置き換えるのがいいと思うけどどうなの。
スクリプト言語とコンパイル言語の使い分けを覚える良い機会になる。 >>487
目的が自作ツールを作ることならそれで間違ってないが
C++を極めることが目的みたいよ 極めると言うても、次の規格が出たらもう過去の知識だし、
いくら頑張っても到達できないゴールのような気がするなぁ。
規格を作る側に入り込めるなら話は違うかも知れんが。
C++は、自分より後ろにいる人をバカにするのが好きな人も多い感じだけど、
「そんな奴にはならん方がええ」 ある程度の言語機能しか使わない範囲でも使い物になるように C++ は設計されてる。
ある程度を学めばその範囲内でも実務に使える。
もちろん深い理解があればプログラムをよりよく構成できるので、
実務に使いながら平行して段階的に学ぶということが出来る。
このことは設計者が著した D&E に書かれてる基礎理念のひとつだ。
地に足の着いた、現実的なものとして設計されてるんだよ。
だから、言語としての C++ だけに偏って学ぶのはお勧めできない。
言語として不格好な部分も現実の中では相応の合理性があったりして、
それを学習するのに適しているのは現実のプログラミングだと思う。
ただ、余談だけど、段階的に学べるようにというのはスタート地点として C を想定しているように思う。
C が当然の基礎知識としてあった時代には
そこからシームレスに C++ を学んでいけるように設計するのは妥当な選択だったかもしれないが、
今の時代には C++ の中の C の部分は色々と足を引っ張ってもいるので
歴史が長いと泥臭い部分も積み重なっていくものだなぁと思いました。 (小並感) 20年近く使ってるけど、ドラフトとか目にしても
「こんな機能来るんや!」ってwktkするだけだな
規格を知ってれば極めてる、みたいな風潮が最近あるけど間違いやで
言語はあくまで道具だから使ってなんぼ みんな深いレスありがとう
ただ自分はどうしても諦めきれないので、仕事以外の時間は、C++に関するサイトや書籍やコーディングに費やすことになると思う
Pythonは学ぼうとは思ってるけどね ttps://github.com/python/cpython/tree/master/Python
今ならpythonのソースコードもオマケで学べるよ スクリプト言語には、ハッシュテーブルやディクショナリなどと呼ばれるキーと値の組を保存するコンテナ機能が存在する。
一般に高速とされるC++だが、実は、ハッシュテーブルだけはスクリプト言語の方がアクセス速度が速かった。
ただし、C++におけるstd::mapだけがハッシュテーブルに該当した頃の話。
今は、std::unordered_mapがあるのでスクリプト言語と同等以上の速度でハッシュテーブルにアクセス可能になっている。 mapはハッシュテーブルに該当しないだろ。
そういうときは辞書とかマップとか連想配列とかと呼ぶべきだ。 クラス設計で悩んでいるんだが、みんなの意見を聞きたい
やりたいのは、いわゆるデザインパターン template methodを使ったクラス設計
class Parent {
public:
void execute() {
method1();
method2();
method3();
}
private:
virtual void method1();
virtual void method2();
virtual void method3();
}
子クラスのChild1, Child2でmethod1(), method2(), method3()をそれぞれオーバーライドして処理を分けている
ここで、Child3を追加しようと思うんだけど、method1()の内容はChild2::method1()と全く同じになる
これをどう実装しようかいろいろ悩んだんだが、どれもピンとこない。
そもそも最初の設計がおかしーんじゃねーの?とかこうしたらよくない?とかここおかしくね?とか意見あったら頼む
一応以下は自分が考えていること
@Child2, Child3の親クラスを抽出して、そっちに共通処理として書く
→実装のために継承関係を作るのはあまりよくない気がする
A別クラス(Utilクラス?)を作ってそっちにまとめる
→メンバ変数とか使ってると少し面倒かな。本質的でない気もする。
BChild3::method1()->Child2::method1()とコンポジション的にする
せっかく横のつながりができないようにしてるのに、ここでできるのはよくない
C親クラスに共通メソッドを作って、Child2::method1()とChild3::method1()はそれを呼ぶ
→しっくりこないけど、妥協点かな・・・
DしゃーないChild2::method1()コピペで!
→これはまあ論外かな、時間が全くないときの最終手段 共通処理を継承関係と無縁なtemplate関数にできないか検討してみては? >>500
それは多分なんらか整列の問題でやりたくないんだと推測
俺なら4かな・・・ 4の改良?として
実装ファイルの無名スコープにvoid method1(const Parent& p)かな 派生させるんじゃなくてメソッドの処理を別クラスにして移譲させるんじゃないの? >>499
> 実装のために継承関係を作るのはあまりよくない気がする
と言いつつ
> 親クラスに共通メソッドを作って、Child2::method1()とChild3::method1()はそれを呼ぶ
とか意味わからん
全然関係ないのにたまたま一緒になったと言うなら
> しゃーないChild2::method1()コピペで!
しかないと思うが コーディング規約で、引数や戻り値に参照型は使うな。わかりにくくなるから。ポインタで渡してポインタで返せ
ってことになってるんですけどこれ一般的な考え方なんですかね。生ポインタ使いまくりの方がよっぽどわかりにくいと思うんですけど そんなことよりメソッドでクラスのインスタンスが変更されない場合
そのメソッドにちゃんとconstつけろよ
引数でクラス使う場合も、そのクラスのインスタンスが変更されない場合
その引数にちゃんとconstつけろよ
わかった? >>506
言ってることがわからなくはないが一般的ではないと思う
むしろ参照のほうが一般的な気がするな 引数については、読み書きする引数は注意をひくためにポインタ渡しにして、読み取りだけの引数は参照渡しにするといいのでは。
戻り値については、失敗したことを意味するNULLを使えるのでポインタのほうがうれしいかも。 >>499
execute が virtual でないってことは
Parentを基底にしてコレクションしなくてもいいってことでOK?
>>501 の言うように template で mixin 的に書いたら こんな感じになったー
https://ideone.com/CcRHnO
ChildがKlassになって兄弟関係がなくなってる 戻り値なんか全部intでいい
0未満ならすべて一貫してすべてエラー
失敗がありえないブーリアンだけはかろうじてあり
引数をポインタで渡せないとNULLを渡して処理したい場合の処理ができない
そういうとき困るから全部ポインタで 素人ばっかりかw
「More Effective C++」の項目1 だろ
Effectiveも読んでいない奴が、プログラミングやってるのが不思議。
どの言語でも、Effectiveは、入門書の次に読む本やぞ
参照は、確実にNULL じゃない場合。
また、参照に再代入はしない事 cからのコードが多い場合は統一のために参照渡しにしないってのはあるかな。 たかが参照にストレスを感じるようになったら、C/C++プログラマをやめた方がいい。引退時。 >>506
C++を知らない老害が自分の為に決めた規約
積極的に逆らおう 私見を言わせてもらうと、多様性を受け入れ状況に合わせて柔軟に合わせていくのもプログラマあるいは技術者の重要なスキルなので、
一神教的な偏狭な人は若年性認知症とまで言ってのける気はないがかなり情報処理能力が低くなっているはずなので、プログラミングをやめた方がいい。 柔軟なのと規約を決めないのはまた別だけどね。
多様性といって新しい言語使って同じ過ちを繰り返している人を何人も見てると
色々バカバカしくなるってところはある。
老害と同じくらい歴史を見ない若造も有害という現実を見るのも良い。 まあ少なくとも>>506が老害であるのは確か
実務経験が少ない若者が多いのも当たり前 老害なんて言っている奴、10年後に自分がそう呼ばれるって事気がついてないのかな・・・ 老人全てが老害になるわけではない
害があるから老害と呼ばれる >>521
歴史?
過去発生した問題点や注意点を伝えるのは上司や先輩の役目
言語自体の歴史、CPU自体の歴史なんか
興味があるヤツだけ勉強すれば良い 数人のグループで開発しているなら、あえてコーディング規約を設けずしても出来るだろうが
100人、1000人規模で開発しているなら、工業製品としての品質管理として必要になるでしょう >>525
ぼくがしらないのはまわりがおしえないから
さすがゆとり 100人規模1000人規模のソフト開発で
若者に言語の決定権があるってのは
すごい会社だね いや別に好きにすればいいとは思うのだが
勝手に自分で選んだ言語固有の問題にぶち当たって
人に泣きつくなっつー馬鹿みたいな話があまりに多いんで。
>>525
まともに聞いてくれれば問題ない。 出来たばかりの最新規格の機能ならともかく
C++98以前からずーっとある言語の基本機能を大した理由もなく縛ってるのは阿呆でしょ
(「大した理由」があるなら縛ってもいいのよ、本当に大した理由ならな) >>460
横だがDLLにstd::stringとかSTLのオブジェクトを渡したり返したりする設計ェ、、、
std::string程度なら現実には動くが、STLの内部動作のバージョン間の整合を誰も保証してくれない以上、
そういう設計をされるともはや誰も動作を保証できなくなる
STLに限らずOpenCVやCRT絡みのオブジェクトでもそう、
というわけでこういうライブラリのバージョンの統一を担保できない状況ではchar[]の登場と相成りぬ、 char[]を使う関数をDLLにして、その関数をstd::string版関数オーバーロード的なラッパーをヘッダーに記述するでしょ、普通。
というか、std::string専用である必要はなく、template関数にしとけばSTLportだろうかstdだろうかEASTLだろうが対応可能になる。 バイナリでの保証を考えると STL を使いにくいってのは確かにあるよな。
COM のような形式を使えばオブジェクト指向をバイナリレベルで管理することも出来るが、
それはそれで別の規約に縛られてしまうわけで。
どんな規約にするにせよ不満は有るよ。
一貫した規約が無い不満よりは規約に不満を持つ方がマシな世界になりがちなのが現実。 そんなもん文字列のポインタ渡せばしまい
頭悪いのって悩む必要がないどーでもいい事で悩むからな
それぞれの完結したモジュールでどのバージョンのSTL使おうが関係ないからな
string ahoをaho.c_str()で渡すだけ >>534
ワカル
それは全く普通の設計でおすなあ、 頭悪いシロウトほど可変長の文字列クラスをいちいち使いたがるからな もしかしてvectorとかもいちいち自分で全部ラップしってんの
とにかく頭が悪すぎるわ ここで問題なのは可変長の文字列クラスを使いたがる類の素人なのではなくて、
DLLのcallerとcalleeでSTLやCRTのバージョン相違しているケースを想像できない類の素人なのでは… このスレにいるような知恵遅れがどんな作り方しても
ぜんぜん問題にならない
STL ver baka
void bakabaka(char const* aho_) {
std::string baka("shine");
ahoaho1(baka.cstr());
}
STL ver aho つかったdll
void ahoaho1(char const* aho_) {
}
なにが問題になるわけ?
もうね知恵遅れのいうことは意味が分からないわけ >>484
極めて同意
仕事だと、過去のしがらみや、コーディングルール等に縛られて、思い通りにできない。
自分で地道に実験してゆくしかない いやほんと
呼び出し元と同じ完結したモジュール内で定義された関数にはconst std::string& ahoやconst std::vector &vecで渡し、
DLLで定義された関数にはaho.c_str()や&(vec[0])で渡す、と区別すればwrapperは要りませんなあ、
いやはや>>541は便利なやり方をいろいろご存知ですなあ、、 >>519
「〜なので、〜なので、○○だ」
読んでとまどいを覚える日本語文ですね >>532
K&R2 の世界の人にとっては、十分に未知な領域なのでしょう…
私は K&R2 自体がすでに「堕落したもの」と考えております >>506
某エディタにこの宗教にご執心の開発者がいるな ポリモーフィズム(多態性)を可読性を下げる欠点ではなく、可読性を上げる長所と考えるのがC++プログラマとしての信仰の基本なので、
様々な記述方法を許す多態性を嫌うのなら、C++を棄教せねばならないでしょう。
演算子オーバーロードを耐えられる情報処理能力があるなら、参照渡しにも耐えられるはずで、参照渡しだけ目の敵にするのはただの原理主義ですね。 >>547
言葉のニュアンス的には原理主義というより教条主義と言った方がこの場合は近いかも だれかたすけてください。
https://dotup.org/uploda/dotup.org1602882.zip
こういうプロジェクトを作ったんですよ。
一応、ゲームっぽいものですが本質はそこじゃなくて。
えーっと、前方参照の解決がよくわからないので直し方教えてください。
普段小さなコードしか扱ってないのでソース分割あまりしないのでわけがわかりません。
コンパイルが通るにはどうしたらよいでしょうか。
お願いします。 ツッコミどころはいっぱいあるけど
とりあえずGameIssue.hの中でRougeStageの定義が見えてないからincludeしろ >>506
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
「変数を参照しているのか逆参照しているのかがいつもわからなくなる、だから必ずポインタを使う。アスタリスクが思い出させてくれるから」
C++ の参照は、呼び出し元の記述では参照として渡しているつもりなのか、実体を渡しているのかは区別できず、
呼び出し先の宣言で、はじめて参照か実体かがわかるんですね
個人的には C# のように、呼び出し側でも参照渡しを明示するのがスマートだと思います
そのコーディング規約は良心的だと思います >>553
参照渡しを明示、とは具体的にどんな方法でしょう? >>556
C#ではなくC++での方法を聞きたかったのですが (^_^;) >>506
constなしで参照渡しするなっていうコーディング規約ならgoogleも採用してるよ >>558
お前はC++とかより日本語の勉強しなよ… 単純にc++だけで閉じてれば参照で統一ってのもありだろうけれど
c++ってそういう言語じゃないんだよね。
大抵大規模なコードは過去のcソースとごっちゃになってる。 >>551
まずは非常にどうでもいいことだが、AddBug(SharedItem I) こういうモノがあると非常に縁起が悪い
他、小姑みたいなスペルミスの指摘は以下
Sheld盾の綴りはshield (Fieldと同じ原理)
Acsessとaccess、
CollectoerとCollector
TyleとTile
InfmationとMakeTemporaryInfomationとinformation
Initilaize、Initialize
PraramA、parameterA
RougeStage.hとRogue いい加減な方法でビルドはできるようにしたのに遊べないよ!
なんとかしろ、作者
GameIssue.h 12行目付近の
class TemporaryInfmation;
をいかに書き換える。
//class TemporaryInfmation;
template <typename RougeStage> class TemporaryInfmationTmpl;
using TemporaryInfmation = TemporaryInfmationTmpl<RougeStage>;
RougeStage.hの3行目付近の
class RougeStage;
~
TemporaryInfmationTmpl(RougeStage* RS) {
をいかに書き換える。
template <typename RougeStage>
class TemporaryInfmationTmpl {
public:
TemporaryInfmationTmpl(RougeStage* RS) {
StatusCollector.hのStatusクラスの
SetDirection()が2個定義されているのでどちらかを消す。 こんにちは。色々ご指摘ありがとうございます。
これまだ、脳内コーディングでシステム組んだだけでコンパイルが通って無いように、デバッグさえしてません。
なんとなーく、ローグのAI書いたら面白いんじゃないかと思って書き始めたのですが、沼にハマってしまいました。
とりあえず、前方参照の件は解決したみたいです。
その後大量のエラーと格闘していますが、支離滅裂なエラー(?)が大量に出ていて吐きそうです。
とりあえず、この件については閉めます。
ありがとうございました。 >>553-556
/* ref */
引数内で、コメントを使えば? >>559
templateの右辺値参照もダメとか
さすがに修正が必要だな >>567
別の項にmoveコンストラクタ、move代入演算子、perfect forwardingするときは右辺値参照使ってええよって書いてあるから、右辺値参照は対象外なんだと思う。
>>565
できたら遊ばせてねー aiでautoってことは遊ぶんじゃなくて遊ばれちゃうのか… Googleコーディング規約は古臭くてオワコンだからみんなはISOで作ってる規約を使おうね!
って禿先生が講演で言ってた >>596
ステージ生成してAIに解いてもらおうと。
そのAI書かないといけないんですけどね。 しかし、ロジカルなことしたいのに、それ以外のエラーで死にかけるのは困ったなぁ。。。 >>572
アルゴリズムの間違いの発見や修正に比べたら、コンパイルエラーの解消なんてコンパイラさんが親切に教えてくれてるんだから、簡単なことだよ。
ロジカルなことしたいなら、コードの記述もロジカルに頑張れ >>570
今現在コード書いてないオワコン禿げのいう事のが信用ねーわ。
江添とかも同類。
コードをまともに書いてないやつが言語仕様決めてるってのがc++のクソなところ。 >>575
コードがマトモに書ける人は書く方が忙しいので仕様どころではないって割とありそう ryzen threadripper 2950X 16C32T 3.5GHz〜4.4GHz !!
なんだか最近急にすごくなっていませんか? floatのゼロ割りって、infになるものの、別にそれ自体が問題ではなくて、
それがクラッシュに繋がるような演算を行うことが問題であって、
例えば条件分岐で一定の大きさ以下の場合のみ参照するようにしているなら問題ないですよね? >>579
うん
>>580
ゼロで割りたいなんて一言も書いてない >>580
物体の速度なのでゼロのときがあるんです。
例えば、ある距離に到達する時間を求めるとなると、その距離を速度で割るのでゼロ割りがあり得ます。 >>581
ありがとうございます。
ゼロで割ること自体を回避するのって、けっこう厄介なんですよね・・・。
ある程度小さい場合は演算しないとか、どれくらい小さかったらいいの?みたいなことを考えないといけないので・・・。
無限大のときにどうする?という考え方の方が対処し易いように思います。 今Python + Opencvで画像処理をしているのですが、速度の問題でこれをC++に書き換えたいです
Pythonのnumpyみたいなものはc++にも有りますか?
OpencvのMatを(多次元配列に格納するなりして)C++で弄くれると嬉しいのですが まずOpenCVはもともとC++で書かれてるライブラリであってPythonのはラッパーだって所から始めようか 江添っちはコード例はたくさん書いてるけど、
アプリケーションとして完成したものはひとつだけしか見たことねぇ。
今はドワンゴにいるし、社内で使うツールを書いたりすることもあるのかなぁ? snprintfには第一引数をNULLにすることで本来何文字の領域があればよかったかを判断できるみたいだけど
wchar_tにはそのようなものはないだろうか? >>570
もしかして先月の27日、行ってきたの? おう行ってきたぞ
内容は知ってる話が多かったけど本人の口から聞けて楽しかった int main(int argc, char** argv)
このchar**って他に変えれたりする?tcharとかwchar_tとか Win32では、int wmain(int, wchar_t**)に変えられるよ。環境変数の引数も付けるのは変態かも知れん。 標準で認められてるmain関数はint main();とint main(int argc, char** argv);だけ
それ以外は処理系の独自拡張 >>590
何か変わったこと言ってたらレビューplz 実は宗教的な会合ではなかろうか
教祖もしくは弟子・伝道者・教皇の御言葉を拝聴する、それが宗教だ
現状、全ての教祖・開祖が生きている時代なので、それを感じないだけだ
10年後くらいにはぼつぼつ死にはじめる
そこからが正念場だ
サイモン&ガーファンクルも生きてるし、K&Rも生きてる、ついでに、ビャーネ・ストロヴストルップとかESRも生きてる
21世紀の今がそういう時代というだけだ >>596
デニス・リッチーは2011年に亡くなった 宗教だと? 失礼だな
俺は禿を盲信なんかしてねえよ
newなんかいらねえと俺は初版の当時から思っていたし
動的例外指定なんぞISOで否定されてんだぞ ジェネリックなメモリ確保はどのみち必要だと思うよ。構文がどうであれ。
あと、動的にコンストラクタとか呼ばないといけないし必要だと思うよ。
個人的にnewはライブラリ屋さんが使えばいいものだと思ってる。 タイプ量増えて嫌カモ。
new T[] ってできるのは結構強いと思う。
まぁ、自分でやる事はないけど。 A, Bそれぞれコンソールアプリケーションで作成
AがBをCreateProcessする状況を作成しました
Aを実行したらBの専用のコマンドプロンプトが立ち上がって次々に処理をするのかな?って思ってたのですが
実際はAが立ち上げたコマンドプロンプトにBも出力などしてます
これ分離することできないのでしょうか タイプ量って、それは現状の構文での話やん
コンストラクタを実行する構文がたとえば3文字のキーワードでできるなら
その主張は崩れる CreateProcess で "start cmd /c B.exe" を起動するんじゃだめ? template <typename T, typename ...ARGS>
T* create(ARGS ...args)
{
auto ptr = (T*)malloc(sizeof(T));
ptr->T(args...);
return ptr;
}
今C++をリメイクするならnewはクビだろ メタプログラミングをやってみたいんだけど、テンプレートが中々難しい
みんなどうやって駆使してる? LPCTSTRをマルチバイトでもUnicodeでも対応して文字列操作するコードってどう書けば宜しいのでしょうか >>611
関数名オーバーロード。それを応用するtemplate。の2つかな。 >>611
まず、#include <tchar.h>。
次にTEXTマクロ、_Tマクロの使い方を学ぶ。
さらに、<tchar.h>を見ながら、文字列関数呼び出しをジェネリックなものに置き換える。 >>577
お前は未だにPhenomなんてガラクタ使ってるんだっけ
お前は無職だからそれでも恵まれすぎだけどな Phenomってガラクタだったんだっけ?
使い始めてそろそろ10年になるが
現在Windows10が動いているけどな プログラムの板で、相手の使ってるハードウェアをネタに
悪口を言うのはよろしくないんじゃないか、と思ったけど、
アンカーの先を見たらそうでもないって気になった。
どうやら「固定ハンドルの人への攻撃はルール無用」という
より上位のルールがあるようだ(あくまで個人的な基準)。 5ちゃんから入ったニワカ君だな
コテハン様は名無しより偉いんだよ
失礼のないようにね >>615
よく知っているね、phenomIIx6 1090 で粘っていますよ、zen2 7nm にて大人買いしようと資金を積んでいます… >>617
>固定ハンドル
固定ハンドルじゃありません、トリップです!! トリップ生成の種も後悔されているから、誰でもなりすませるかと >>611
Tに対応した文字列操作関数だけを使って操作するか、CT2W/CW2TでWに変換して操作するか実質二択。 >>622
ヌル文字列を固定ハンドルにして、
それに QZaw... ってトリップをつけてるのかと。 テスト
◆QZaw55cn4c の酉って割れてるよね? この前のローグ、標準ライブラリにメモリ確保お願いしてるのに中でNULLオブジェクトを操作して落ちるようになって詰んだ。。。
もういやー。 >>631
cpplintとかInferとかかければある程度は原因絞り込めると思うけど
Winじゃ導入が面倒か >>632
返信ありがとう。ヤル気がゴッソリぬけのたのでしばらく放置します。
特殊なこと全くやってないになんでこうなるんやー。
うぅ。。。 >>633
メモリ管理の問題ということは、特殊なことをやってたかではなくて、基本的なことが正しくできてないということだよ。
プログラム初心者ならメモリ管理やポインタに煩わされない他の言語の方が良いかと思うよ。 まずはgoかjavaでもやったらいいんじゃないかね。 >>633
バグって自分が絶対に大丈夫なはずと思っている箇所に潜んでいる
しばらく放置してから見つけると、意外に簡単に見つかる 共有メモリでBSTR型のデータを共有してるのだけど
これのデータサイズ取得する方法ある?
対象領域の先頭ポインタを基準にSysStringLen使ってデータサイズとれるかな?って思ったがとれなくて困ってる >>637
正解。慢心してた。
とおった!!俺のせいだった。ごめんなさい。
なんでスマポのインスタンス自動確保されると思い込んでたんやろ。ここだけ。
ごめんなさい。ごめんなさい。ごめんなさい。。。、 慢心と呼ぶべきか、脳内キャッシュを利用した最適化と呼ぶべきか。
しばらく放置することで脳内キャッシュが解放され最新データの利用が可能になる、ありふれた光景。 >>641
私の場合は、しばらく放置しただけではダメで、リリース(公開)することを契機に問題点が不思議と浮き彫りになる、という感覚を持っています >>642
リリース(公開)する時の質問の文章を書くことで、脳内のメモリ配置が変わり、脳内キャッシュが破棄されたのでしょう。 https://dotup.org/uploda/dotup.org1607631.zip
ふー。皆さまのおかげで、最初のAIが階段に到達するまでできました。
とはいっても想像するよりよっぽどチープだけどね。
やっとまともにデバッグできるようになったら、色々仕様変更したい病発動してジレンマに陥ってる。
特にトラップクラスいらねーんじゃね?とか思い出して、根幹を揺るがせつつある・・・。
というわけで、皆様どうもありがとう。
ちなみにgithubにも公開してるけど、ライセンスはmitなので煮るなり焼くなりしていいよ。
そんな酔狂な人間がいるか知らんし、多分同じコンセプトで書き直したほうがいいカモだけど。
githubはソース置き場にしてるだけからgitの操作さっぱりわからん・・・。Orz >>644
URLサンクス
もしかしてサイズ取れないと言うことだろうか 左様そう考えて差し支えない
ID:rT8gQk9M は近隣住民の安全のために、BSTRをもたず、つくらず、もちこませずを堅持すること https://ideone.com/eDOvCH
これで、Next保存する方法ないですか?
ダイナミックキャストだけかな?
継承したら自分の型忘れるのホント面倒。 >>648
保存(シリアライズ)のインターフェースをBaseに持たせてNextでNextの保存処理を実装したらいいんじゃね >>650
ゴメン。ちょっと舌ったらずだった。
各クラスが持ってるTypeに自分の型を保存する方法ないですか?
継承して記憶喪失になっても復元できるようにしたいのです。
システム内でちょくちょく必要になるのは俺がタコだからなんだろけど。
もちろん、ユーザーコードには見せないようにしますよ。 型を知りたいというならdynamic castが一番可搬性が高いやり方だと思うが
型を知りたいだけ、なんてことがあるのかどうなのか
普通はダウンキャストしたいという要求とセットのはずで、
ダウンキャストはインターフェースをゼロから周到に設計すればポリモーフィズムで解決できる
再設計をゼロからやれないときだけがdynamic_castの出番、という印象
※ 個人の感想です static_cast<DeleteAster<decltype(p)>::OldType*>(p)->OldTypeMethod();
的なことをやりたいのですよ。
システム制作者が完全に意思疎通してて型がどうなってるか周知って前提なんだろうけど、
継承したものをごっちゃにコンテナに入れたら破綻するんだよなぁ。。。
anyもいいなぁと思ったけど、結局キャストする手間は変わらない。むしろキャスト必須。
なくても何とかなるけど、余計なコード書かないといけないからスマートな方法ないもんかなぁ、と。 usingとかtypedefとかtype traitsとかautoとか使へば、何とかできる気もするが、
さういうコードをなかなか書けぬ人はスクリプト言語へ行くへし。 rustがレールに乗ればなぁ。
そういえば、anyはtype_infoを返すメソッドがあるのでので動的にチェックができるみたいだねぇ。
ないよりましだけど、確率になっちゃう。ぐぬぬ。
>>657
そうそう、できそうな気はするんだよね。うーん。。。 >>657
ID:p9jfuJcVの悩みはコンパイル時に解決できないからusingとかtypedefとかtype traitsとかautoでは_ぽ
(Base* pを扱うコードのビルドでコンパイラが常に*pの型がNextであることを見抜いたり、Nextの詳細を見通せたりするわけではない
というわけでポリモーフィズムでしか解決できん
ID:p9jfuJcVは、クラスごとに異なるOldTypeMethod()を呼び出すインターフェースCallOldTypeMethod()を設けて
BaseやNextそれぞれ毎に、適切なOldTypeMethod()を呼び出す実装を与えなさい
※ 個人の感想です 実行したいこととオブジェクトの型が一対一対応であるという保証はない。
C++固有のポリモーフィズム機能を使うと他の言語に移植できなくなる。
実行したいことを列挙型なりビットフラグのメンバ変数として保存しておくのが一番楽だろう。 追記。
やりたいことが1種類だけなら型と紐づいていても問題ないが、
やりたいことが複数の組み合わせになったら型と紐づいた設計は破綻する。
何がいいたいかというと、アキラメロンということだ。 皆さまありがとうございます。無理ぽいことがよくわかりました。
>>659
うーん。
仮想関数との違いがよくわからないなぁ。
プロキシ―オブジェクトってことなんだろうけど。
うーんと、ほしいときって初期化タイミングの調整とかそのへんなのでメインレールはインターフェースでいいんだよなぁ。
どうしてこう融通が利かないのか。設計のせいか・・・Orz
>>660
結局そういうことになるんですよねぇ。。。うーん。
>>661
コンセプトがいるような気がする。
さっき上げたコードをテンプレートとanyで書けば同じようなことはできるけど、エラー吐いたら地獄な気がする。
でも、そっちの方が高機能かもしれんなぁ。anyのキャスト問題を除けば。 とりあえず、お付き合いいただきありがとうございました。
今日は寝ます。また。 Unicodeの時はwchar_t、マルチバイトのときはcharとして扱ってデータをコピーしたい
その切り替えを処理途中にifdef入れまくるのは不適切だと思うからdefineかtypedefを一度することによって
自動で切り替えられるようにしたいけどtypedefだとできない?
#ifdef unicode
#define tlen wcslen
#else
#define tlen strlen
#endif
int main ()
{
TCHAR a;
int size = tlen(a);
} >>665
以下のようなwchar_t, char に応じたオーバーロード関数もある。私は使わないけど。
std::char_traits::length(const T* s) コンパイル時に決まってるならテンプレートにすればいい >>668
文字列長を求める
データコピー
Stringstream >>670
これだとLengthに特化したやつだけになるのかな?
他にもあるので切り替え方法が知りたく
>>672
コンパイル時には決まってます
テンプレートを作成するってのはT型を作るってことかな? クラスのインスタンスのコピーさせない方法ってコンストラクタにdeleteをつけるだけで実現可能?
それとも違うんかね?
参考を探していてもデフォルトコンストラクターにつけているだけで
複数のコンストラクターがある場合とかがわからない コピーコンストラクタとoperator = をprivateにして
関数の実体も作らない STLの仕様を見ます
自分で実装します
ソースコードをみて答え合わせをします
まずはvectorから、ハイ、どうぞ 高位合成toolを入手します。
あなたの思った通りの動きをするCPUを作れば完成 CreateProcess失敗したときのhProcessに何が入るか記載しておいてよmsdn
NULLなの!?それとも別なの!?
msdn使いこなせるやつすげぇよ本当に >>670
char_traitsの関数はオーバーロードじゃねえだろ
引数ではなくスコープで区別するんだから >>683
CreateProcess()使ったことあれば lpProcessInformation.hProcess ってわかると思うが…
>>682
何も書いてない → 何が入っているかわからない
ってことだろ >>686
HANDLEならINVALID_HANDLE_VALUEがデフォでしょ >>685
std:char_traits<char>::length(const char*)
std::char_traits<wchar_t>::length(const wchar_t*)
こういう関数の選択は引数によらない
wchar_t x[2];
std::char_traits<char>::length(x); //error >>688
だからそんなことを期待しちゃダメってこと >>689
wchar_tを使うとわかっていてテンプレート引数にcharを入れるのはおかしくない? >>682
関数が失敗したら新しいプロセス自体作れられないんだから
hProcessが不定でも何も困らないと思うが >>691
std::char_traits::length(x); //error std::char_traits<wchar_t>::length(x);//0 char_traitsの件、どうも話通じてないなあ 多重定義, オーバーロード - Wikipedia
https://ja.wikipedia.org/wiki/%E5%A4%9A%E9%87%8D%E5%AE%9A%E7%BE%A9
質問者が解決の糸口を見つけられればそれでいい。
>>684 のような間違った用語定義を主張して、何の生産性にも貢献しない ID:NKvoiPPS みたいな人は迷惑。 >>700
Wikiより規格票な
N3337 13 Overloading [over]
When two or more different declarations are specified for a single name in the same scope, that name is said to be overloaded.
JIS X3014:2003 13. 多重定義
同じ名前を指定した異なる宣言が同一有効範囲内に複数ある場合,その名前は,多重定義されているという。
言わんでも解るだろうから、説教臭いことはあえて黙っておく たしかに >>670 のいう「オーバーロード」は用語の使い方が誤っているが、
それはそうとしてオーバーロードっていう言葉の中にバーローという言葉が入ってるから、
オーバーロードの話題が出るたびに俺の中のコナン君がバーローとささやくので、
お前らにも同じ呪いをかけてやろう。 std::char_traits<char>::length()と
std::char_traits<wchar_t>::length()は
互いに同じ名前(a single name)なんやろうか… >>663
>どうしてこう融通が利かないのか。設計のせいか・・・Orz
ユーザーコードにクラスの中で定義された型(Base::TypeやNext::Type)を見せるのはやめて、
NextやBaseのオブジェクトのふるまいとしてだけ見せたら宜しいかと
ふるまいだけを見せる抽象化はまず純論理的にはポリモーフィズムで逝ける
次の段階として、呼び出しの度にvtblの間接参照が一発入る遅さを嫌い、高速化したいという要求が生じるかもしれないが
そのときは知らん(テンプレートによるダックタイピングでさらに戦うこともできるが同一翻訳短以内でのcloseが前提でありかつクラスの継承の恩恵にはなかなかあずかれない なおふるまいだけを見せる抽象化ができないオブジェクト指向言語とか無いから他言語への移植性とかを気にするのは狂気の杞憂
ていうか非オブジェクト指向言語であっても関数ポインタと構造体が使えれば似たようなことはいつでもできる 非オブジェクト指向言語とオブジェクト指向言語で
最終的に作れるものと作れないものは
その違いによる差は全くないんだが レイトレーシングをやってみたいんですけど、何もない状態から画像を生成するのと、画像処理(opencv)でやろうと思ってます。
前者と後者とも資料は見つけたのですが、どうやって勉強するのがおすすめですか?
opencvで例えばアイドルの画像をCGっぽく、またはアニメっぽくはできたりするのでしょうか? >>711
多分君には無理だからそういったアプリを探しなさい
煽りでも何でもなく実力不足 >>711
レイトレーシングの本質は三次元空間での光の挙動のシミュレーションであって
既存の画像を加工するような技術じゃないぞ 視線の追跡したほうが効率よさそうな気がする。
目に入らない光は無いも同然だし。 >>716
寝ぼけて謎な用語の用法をしてしまった忘れてくれ
視線側からのレイの追跡だ 遠い昔だが、いい基礎解説本があったんだがタイトルが思い出せない
98用のCのソースコードも附録でついてた
98なんかもってなかったから、Xlibで動かした記憶がある
その書籍はサーフェイスモデルもレイトレーシングも基礎から丁寧に書いてある良書だった
サーフェイスモデルについては、ものすごい力を入れて書かれてた良い本だった
ワイヤーフレームから陰面消去、さらに双三次スプラインでの補間、そしてレンダリング、バンプマッピング
さらに3次アフィン変換つかってモーションキーで動くとこまで解説してる
基礎で必要な内容は、ほぼすべて網羅されてて、バカでもチョンでも分かるように書かれてた
で、レイトレーシングはサーフェイスモデルより超簡単だからな
このスレのアホが難しいといってるだけで
むしろレイトレーシングはバカでもチョンでも分かる せっかく良い質問なのに、
あまり汚い言葉で、アホとかバカとかチョンとか言わなない方がいいよ… レイトレーシングに限らないけど、アルゴリズムの勉強にはLinuxが良いですよ。 紹介されてる本全部古い...
linuxだと何がいいの? openclとグラボの勉強したら?
レイトレーシングの大量の計算するのがグラボでしょ >>724
アスキーの『応用グラフィックス』か。入門・実習・応用の3冊シリーズだね。
各巻のつながりは緩いから順番に読まなくてもほぼ大丈夫だけど。
確かに良い本だった気がするけど、なにぶん読んだのが昔なんで
いくらも理解できなかったわ。今ならもう少しマシだと思いたい。
大学近くの古本屋でなら見つかるかも。
畏(おそ)れ多くも森喜朗元帥閣下の有り難いお言葉:
「オレはIT(いっと)のことはよく知らんがぁ
時計をたった2時間早めるだけだろぉ?
オレなら1分あれば済ませるぞぉ!
サマータイムの何がそんなに難しいんだぁ?」
システム開発現場の勇ましい言葉:
「畏れ多くも森元帥閣下のご下命を賜った以上
現場SEは有り難いお言葉に勇気百倍
デスマーチとバンザイ突撃を敢行いたします!」
「マラソン選手さまが涼しい時間に走るためなら
現場SEの千人や二千人死んでも本望です!
私たちSEの生命など、虫けらと同じです!」
「畏れ多くも森元帥閣下の有り難いご下命にしたがって
最前線システム開発現場で殉職出来るとしたら
現場SEとしてこれに勝る喜びはありません!」
日本という国では
体育会系が一番偉い(森元帥閣下、田中理事長)
文科系がその次で(財務省、教授会)
理科系は最底辺の奴隷とされています(現場SE)
レイトレーシングがサーフェイスモデルより簡単とか
半透明物体内部の散乱表現に踏み込んだらそんな寝言は言えないんじゃ… みんな例外と戻り値ってどう使い分けてる?
例えば以下みたいな、ファイルからとある要素を抜き出して返す関数とかで
std::string extractHogeFromFile(const std::string& file_path)
俺だったら以下みたいにしてるけど、いまいちしっくり来てないとも思ってる
ファイルが見つからない→例外
要素が見つからない→例外
要素が見つかるけど空→空
みんな例外クラスとかはstd::exception継承して自作してるのかな?
バックトレースやコード行数とれないのが使いにくくて、javaっぽい例外クラスを自作してる exceptionを直に継承ということは滅多にないな
system_errorがあるからerror_categoryの派生クラスを作れば大抵足りる
__FILE__ や __LINE__ のようなデバッグ情報を入れたくてマクロを作ることはあるけどね
空という概念ならoptionalはいかが?
template <typename ELEMENT>
std::optional<ELEMENT> extractHogeFromFile(std::path) noexcept(false); >>733
発生時は確かに遅いね
ただ、あくまでも例外的なものだけに利用をとどめておけば、そんなに発生するものでもないし、その場合は戻り値をifで見るより命令数が少なくなるから、結果的に高速になるって俺は考えてる
>>734
exception直に継承も少し疑問もってるんだけど、std::exceptionのcatchで全部取りやすいからこうしてるんだよね
...でcatchは乱暴な気がするし
ただ、調べて見た感じsystem_errorも使いやすそうね。最近開発で使えるようになったC++11だからこんなのあるの気づいてなかったわ
std::optionalとかあったんだね、ちょっと調べてみるわありがとう >>720
レイトレーシングが簡単なのは入り口だけ
20世紀あたりのなんちゃってレイトレーシングは楽だけど本格的にやると解決できない問題が多数出てくる ファイル開くのはそれ自体がすっごい遅い操作だから例外のコストなんか無視できるのと
開き損なうとそれ以降の処理が致命的な失敗になりやすい
そういう操作のエラー通知が例外に向いてる >>733
例外発生時の速度が問題になるなら例外の使い方を見直した方がいい >>832に対して
例外は遅いから例外の時に使いましょう
ということを書いたつもりなんだけど
単なる終端マークとか区切りとか
そういう頻出する可能性のある用途では使っちゃダメってこと 例外は仕組みを入れるだけで、
例外が発生しなくてもオーバーヘッドが発生する環境がほとんどなので
組み込みだとわざと無効にすることも多い
x86の64bitはオーバーヘッドが無い代わりに
例外発生時は極端に遅い
一度測定してみるとその遅さがよく分かる
そういうことがわかっていれば
どこに使うべきかがおのずとわかる 低水準ライブラリに属するべき関数が例外みたいな高級なしくみに依存するのは美しくないキモス
システム設計とかアプリの基本設計レベルで例外の種類とcatch箇所とcatch時の処理を定義して使うなら良い
が、呼び出し側でif文を書きたくないからという理由でイミフな例外定義を行うと、結局第三者に正しく使ってもらえない
キモス 例外のオーバーヘッドについてはこれな↓↓↓
ttp://zakkas783-blog-blog.tumblr.com/post/3870295160/c-の例外ハンドリングとパフォーマンス
>>740の通り例外処理の裏側の実装には2つの潮流があるんじゃ 制御をすっ飛ばす必然性があるほどの例外的状況に限るのが吉だろうな。
返値で返せないものを返すのに使うなら検査例外のような保証が欲しいところ。 別スレッドでの関数呼び出し階層が深すぎて安全にスレッド終了させる方法が分からない時に便利でしょ、例外。 前測ったときはアセンブリ言語にしてみると、戻り値ifチェックだと2命令だったのが例外使うと20命令くらいだったなぁ >>741
自前の文字列操作のUtilとかだと例外にするかすごいその観点で迷うんだよね
>>743
賛否両論なjavaの検査例外だけど欲しくなるときはあるね
C++の例外指定がもう少し使いやすければよかったんだが
>>744
すごく同感 >>739
困ったことにbasic_iosはexceptionsで頼みもしてないのにEOFで例外を投げる HTTPで400番台500番台は例外投げればいいのかな。 例外を投げるクラスはピッチャーって名前でいいんか?
受け取るクラスはキャッチャー? C++17では多値が返せるようになりました。
できるならレガシーを切って次へ行きたいものです。
またはstd::optionalなんてものもありますな。
std::tuple<bool,Item> Fun(){return {true,Item()};}
auto [F,I] = Fun(); あ、多値自体は返せたけど受け取って初期化できるようになったか。
ちなみにすでに実体化している変数は、std::tie(...);で受け取れます。 >>754
prvalueでもforward_as_tupleならおk auto func()
{
return forward_as_tuple(123, "456");
} ただ元からタプルがある言語と比べたら劇的に汚い仕上がりだよね 演算子オーバーロードっぽいものを珍重するのはやめた方がいいと思うけどね。 autoでしか受けられないのがイマイチかなあ
メインの戻り値は期待する型を明示したいことがある
エラーの方が何のenumかは知ったこっちゃないからautoにしたかったりするからややこしい 無名の共用体と似たようなもので
構造体のメンバをバラで貰えるってだけやん C++のメタプログラミングって実際にはどうすればあんな複雑に書けるの?
自分は出来ても階乗を求めると型の判別くらいしか出来ない >>767
脳内バッファがなぜ必要?
>>768
そうしてみる‥
Lisp読んで見る >>766
メタプログラムは今ほとんどconstexprに置き換えれない? >>770
確かに置き換えられるんだけど、それじゃあ普通のプログラミングと変わらなくて面白みが無いと思って‥ >>770
型でメタプログラミングするとき困らんか? >>760
特に何とは言わないけど
return (123, "456");
とか
return 123, "456";
みたいに現行のc++ではできないタプル表現のほうがすっきりして見える (個人の感想です) 123には副作用が無いから最適化でreturn "456";になるんじゃ… vector<object*>* list;
Fuga fuga;
Hoge* hoge;
for(int i = 0; i < 5; ++i)
{
fuga.fugaMethod(hoge->hogeMethod(list->at[i]));
fuga.fugaMethod(hoge->hogeMethod((*list)[i])); // エラー
}
リストの要素に対して全部処理をするっていうよくあるプログラムなんです。
なんですが、上の書き方だと通るのに対して、下の書き方だと「式にはクラス型が必要です。」と出ます。
vectorの要素指定はat(i)を使うか括弧で指定するかの2通り、違いは範囲チェックを行うかどうかだけという認識だったのですが……
何がまずいんでしょうか? list->at[i]はまずいだろ
typoか? それとも本当にそう書いているのか? typoじゃないとしたら、上は通ってるんだから
hogeMethodの引数がobjectかobject&なんだろうな えーっとtypoじゃないです。
何がまずいんでしょうか。ポインタだしアロー演算子で問題ないのでは。
それとhogeMethodの引数はobject*ですね。抜けてましたすいません。 >>777
vector<string *>::iterator list;
なら理解できるのですが、
vector<string *> *list;
というのが、よくわからないのです
プログラム例では list にすでに値が入っているようですが、実際には
list をどのように初期化しているのでしょうか? >>777
(*list)[i]
(*list).at(i)
list->at(i)
は等価であることを確認しましたが
list->at[i]
というのは逆にダメっぽいです
https://ideone.com/ripLji
list->at[i]
がどういう文脈なのか?
コンパイラがなになのか情報をください >>780
何がまずいって
listはvector<object*>へのポインタ
list->atはvector<object*>::atでメンバ関数
ここまではいいが
at[i]は関数に添え字だろ
こうやってんのと同じだぜ
void func();
func[1]; あ、すいません、確かにat(i)はtypoでしたね。
ごっちゃになってましたすいません >>786
> 確かにat(i)はtypoでしたね。
なら普通に両方コンパイルはできるはず
エラーになる最小限のコードにしてどこかにアップして 関数テンプレートの部分特殊化ってC++17でもできないの? >>789
できない
# いらんだろ、多重定義で同じ目的を達成できるから 関数の多重定義もクラステンプレートの部分特殊化でstaticメソッドを特殊化したら代替できるからイラン >>793
どゆこと?
たとえば
int abs(int);
double abs(double);
を、
クラステンプレートの部分特殊化でstaticメソッドを特殊化つーと
template <typename A, typename B>
struct num;
template <typename A>
struct num<int>
{
static int abs(int);
};
template <>
int num<int, int>::abs(int arg)
{
return arg < 0 ? -arg : arg;
}
みたいなことすんのか? 普通は関数オブジェクトにするんじゃね?auto operator()(...); うご、投稿してモータ。
例のローグのシステムが大分できたのでなんとなく投下してみた。
汎用AIってどうやって書けばいいんや?
しかも、まだバトルシステム作ってないし。 ところで質問なんだけど、パスファインディングってサービスとして入れたほうがいいのかなぁ。。。 >>766です
C++テンプレートメタプログラミングという本を買ってみたのですが、この本C++BoostのMPLの解説本です
C++17がある今、この本の価値ってあるんでしょうか?
一応全部読んでみようと思ってるのですが >>799
> 一応全部読んでみようと思ってるのですが
読んでみてから判断すれば? 多分聞きたいのはこれ読んだらオラついていいですか?ってことだと思う。 >>800
>>801
すみません
Boostを使わず、mplを使わないのでメタプログラミングするのが目的なので、それがこの本を読んで可能なのか?という質問の趣旨です >>802
> Boostを使わず、mplを使わないのでメタプログラミングするのが目的
そんな明確な目標あるのになんでこんな本買うかなぁ
ちょっとググればこんな意見が見つかるだろうに…
ちょっと文章が直訳っぽくてところどころ不自然だけど,丁寧にBoost.MPLの実装(と使い方)について解説してあってとても分かり易い!
http://d.hatena.ne.jp/eldesh/touch/20100412/1271090614 >>802
メタプログラミングを活用すればこういうことも出来得るという事例集として見れば無駄ではないと思うが、
それを読んでメタプログラミングが出来るようになるかというと否だと思う。 >>803
この本を買ったのは高橋晶のC++11対応のテンプレートテクニックって本を読んで、巻末に本の紹介があって、メタプログラミングについて知りたいならこの本を読むべきって書かれてあって、読むことにした
そのブログはすでに読んである
>>804
メタプログラミング自体はどうすれば出来るだろうか? > そのブログはすでに読んである
私はバカです
って言われても… >>806
売ることにします‥
>>807
もう日本人に頼るのは辞めました
そもそもWG21から情報を検索したほうが有意義かも
これからは日本語のプログラミング書籍は買わない方がいいって教訓になりました 捨てゼリフ来たね
そろそろご退場かな
総員塩の用意 >>809
いやだって日本人でC++やってる人少ないじゃないですか(´・ω・`) やっぱPerl人口が一番多いと思うのねん
その次がPHP 英語をスラスラ読めるなら「遅い・高い・分かりにくい」の
和訳版を買うことはないわな。
原書ならPDF版がタダでネット公開されてたりするし。 >>799
前半とこどこBoost.MPLの設計理念とかどう実装されてるかとか書いてあるから、そこは参考になると思う
後半のTMP関連のテクニックはおそらく求めているものではないかと
ExpresionTemplateの実装にあまり踏み込まないけど、どのように誤用されているかは少し参考になった https://wandbox.org/permlink/TC3VtzZ4Dd53Z1Y4
こういうコード書きました。
UIはとりあえず置いといて、Jsonの構造ってこんな感じでいいのでしょうか。
ご意見あったら教えてください。 あの初歩的な質問で申し訳ないんですけど、クラスのメンバ関数のことです
例えばAってクラスがあって、hogehogeって関数があったとします
それでhogehogeは内部で関数を3つ呼び出す。ざっとこんなイメージです
A.h
class A
{
public:
void hogehoge();
}
A.cpp
void A::hogehoge()
{
x();
y();
z();
}
main.cpp
main()
{
A a;
a.hogehoge;
}
んでこの場合の関数x() y() z()なんですけどクラスAのメンバ関数にすべきなんでしょうか。
それとも単にA.cpp内に関数書くだけでいいんでしょうか。
x()y()z()はhogehoge以外から呼び出されることはありません。
自分は前者だと思うんですが、参考にしろと渡された前任者(今いない)のコードだとなんでもかんでもメンバ関数です。
よろしくおねがいします。 あ、すいませんhogehogeではxyzを呼び出す以外にも処理を行うものとします
そうでないとxyzをメンバ関数にしてhogehogeなくせってことになるので > x()y()z()はhogehoge以外から呼び出されることはありません。
だったらラムダ式じゃね?
auto x = [this]{};
auto y = [this]{};
auto z = [this]{}; >>817
どっちでも良い
というか時と場合によってどっちにすべきかが違う メイヤーズは独立できるならメンバにせずに関数にしろって言ってた 言語処理ってphythonとC++どっちが向いてる? 処理内容によると思う。
一応、自分は、protectedのメンバ関数にするかなぁ。 >>822
漠然過ぎてどうとも
ゼロから書く気はないんだろうから試行錯誤するのも含めてPythonのほうを勧めるよ >>817
関数にできるってことはメンバ変数の参照とか他のメソッド呼び出しがないんだよね
なら関数にした方が微妙に速度が稼げる(thisを渡さずに済むから)
各々一回しか呼ばないなら呼び出し箇所に展開しても良いような気がする 参考になりました。皆様ありがとうございました。
effective C++のメイヤーズ先生に従い、通常の関数にすることにします。
……あれ、そうするとその関数群だけで使う共通の変数ってメンバ変数にすべきなのかcpp冒頭で宣言してグローバル変数にすべきなのか
いやぁ難しいですね データメンバーにしなさい
グローバル変数は悪である >>826
「共通の変数を使う関数群」をクラス化するんだよ
そのためにあるんだから >>826
> ……あれ、そうするとその関数群だけで使う共通の変数
いや、そんなもんがあるならメンバ変数にするか、それらを構造体とかにまとめて引数で渡すとかしなよ
ファイルスコープだとしても今時グローバル変数は無いわ クラスのstaticメンバにすりゃええんちゃうのん? わざわざstaticにする強い理由があればそうするが
消極的な選択なら非staticのほうが何かと楽だぞ ちょうど気になる話題だから聞くけど
OpenCVで1つの画像データを複数の関数で扱う場合って、引数として渡すのとグローバル変数として定義するのってどっちが良いのかな?(速度とかの面で)
無限ループで毎フレーム毎にWebカメラから読み取った画像を(グローバル)変数に代入するからそこでの速度とかメモリ管理の差とかあるのかな? >>831
そこまでして再発明したいんなら言語なんて何でもいいんじゃね?
ちなみに素養はお持ちなの?
そういう研究してたとか >>831
あ、読み違えた
自然言語処理ではないんだね
何かのパーサーでも書きたいんですかね? >>837
OpenCVのMatなら何も考えずにコピーすると浅いコピーになる
浅いコピーのコストが問題になるならグローバルなりメンバなりにする方がいいのでは cv::Matがスマポみたいなもんだということを知らずにチャチャ入れてるなら黙ってたほうがいいよ そんな事はしっている
目の前に浅いコピーって書いてあるし
浅いコピーよりも当然参照やポインタ渡しの方が速い
当たり前だ
sizeofでcv::Matのサイズを調べてみろ
構造体やクラスを渡すのに深い浅いに関わらず
コピーなんか使うなよ >>837
> (速度とかの面で)
早すぎる最適化は諸悪の根源である
ドナルド・トラン…
じゃなくてクヌース 今更になって>>825で言ってくれたことが理解できた
クラス内でメンバ変数使おうとするとメンバ関数じゃないとだめなのね。普通に分けたただの関数からじゃ呼べなかった
えーこういうもんなのか cv::Matとcv::Mat*のコピーコストの差を気にするくらいならデリファレンスのコストも気にしなきゃな。 844はunique_ptrやshared_ptrも参照渡ししてそう >>847
構造体やクラスだと
ポインタや参照がデフォなんだよ
とりあえずポインタ、参照で渡す事を考える
これでは困る時にはじめて他の方法を考える
わざわざ無駄に重くしなくて良い
コードサイズも実行時間も使用メモリも増える
悪いことしかない >>838
世の中の殆どは再発明の繰り返しではないか
そこから新しいものが生まれる
>>840
機械学習、音声言語処理に興味ある
生成や知識獲得とかも とりあえず車輪からだな
あっそれロン。大車輪で役満です ユーザーの実行コストを考えたらC++しかありえない >>848
間違って通常のポインタを引数に指定されないよう、共有ポインタの参照を引数にすることはあり得るでしょ。 Visual Studioのデバッグ実行ってクラッシュとかしてもコードのどこでクラッシュしたかを示してくれるのですごく便利なんですが、
ただでさえ重めだった実行が、2015から拍車がかかり、かなり使いにくくなってしまいました。
どうもvector等のSTLの範囲チェック等が重たいとのことで、たしかにSTLの使用割合が多いアプリほど重たい傾向にあります。
たしかに範囲チェックはありがたいのですが、多少デバッグ能力を妥協して動作を軽くできないでしょうか?
理想はデバッグ機能をカスタム実装してリリースモードで動作でしょうけど、
予想できないクラッシュ等に対応するのが難しいと思います。
ご助言、よろしくお願いします。 質問ですが
class Foo {
public:
int a[100];
Foo();
};
というクラスにおいて、構築時にメンバa[]をゼロ初期化する簡単な書き方はありませんか
ちなみに
Foo::Foo() : a({ }) { }
とやったらエラーになりますた、 普通に書いたらええがな。
Foo::Foo(){
for(int i=0; i<100; i++){
a[i] = 0;
}
} レスdクス、
>>862
申し遅れましたがやpっぱC++11では_ですかそうですか… 初期化法自体はC言語からある方法だけど。
構文はC++だけどね。 >>859
平均的じゃ足りんだろ
VMwareとか使いまくるには
RAMとHDDがたんまりないと心許ない Foo::Foo() : a{ } { }
でええやん >>861
Foo::Foo() : a{ } { } 今時はSSDだろ。SSDにデータ移行しなよ。VS2017が数秒で起動するぜ。 >>872
何もかもがめんどくさっくて、C ドライブになんでもたんまりと仕込むのが好きなんですが、
1TB くらいある SSD ってお高いんでしょう? >>874
例えば、だが
Crucial SSD 1000GB MX500 内蔵2.5インチ 7mm ¥23,738 理由はわかるが柔軟性が欲しい
class A{
};
class B: public A{
};
temaplate<typename T>
void test(T a, T b){
}
A a;
B b;
test(a, b);//Error.型が一致しない。
test<A>(a, b);//ok.明治すればok >>874
きみなら一時間とは言わないが、一日でそのくらい稼ぎ出すんやろ? >>878
こうすればokというのはわかるけども面倒
template<typename LT, typename RT>
void test(LT const& a, RT const& b){
} >>860
ありがとうございます!
これでやってみます!
>>858
vim、興味深いですが、慣れるまで時間がかかりそうですね^^; notepad++かサクラエディタ
ttps://forest.watch.impress.co.jp/library/software/notepadplusp/
ttps://sakura-editor.github.io/download.html vim は、
迷ったら、Esc を押して、コマンド入力モードにする。
そこで、a を押せば、append 文字入力モードになる
:q! 保存せずに終了
:wq 保存して終了 今は spacemacs 以外あり得ないよ
欠点が厳密にゼロ個な完全なチョイス 最近はVSCodeが使い物になってきたぞ
CMakeとの連携も賢い
補完がまだ遅いが 自分はサクラエディタを10年以上愛用しています。
VisualStudioはコンパイラ兼デバッガとして利用してます。 俺の main.cpp が 9万5千行 を超えた
ファイルサイズにして2.37MBある
クラス内でなら前方参照が可能なC++の盲点をついて
適当な struct でプログラム全体を丸ごと囲って
前方参照しまくり & ヘッダに全部書くスタイルで
一つのファイルに全部押し込めた
C++サイコー ちなみにコンパイルが遅くなるのと
コード補完が重くて使い物にならなくなるので
素人にはお勧めしない 大丈夫
サンデープログラマーで俺一人だけしか書かないから
ソースコードも公開してないしな >>888
キモすぎやろ…
>>891
見してくれ こういうのは怖いもの見たさみたいなのもあると思うし
これだけでコンパイルして動くものでもないので一応ソースコード
あまりにもアレで、そっ閉じだろうけど
http://www.geocities.jp/notenop/tomato_player/main.cpp
コンパイル済みのソフトは
http://www.geocities.jp/notenop/tomato_player/index.html
からダウンロードできる
非同期処理に俺が思いついた横断的でトリッキーなアイデア
https://qiita.com/notenopg/items/40571e69986a58b888a0
↑が使われている
安全にキャンセル出来なきゃ await の意味ないでしょ!ってなもんで
でもなかなか理解されないんだよなぁ、すごいアイデアだと思うんだが
それからツリービューのアイテムのピン止めのアイデアは
お気に入りやタブの代わりになって画期的だと思うんだが
何故マイクロソフトがエクスプローラに実装しないのか謎
特許関係かね
あとはフォルダ階層をそのまま扱える木構造なプレイリストとか
そんなことやってたら9万行超えました
ちなみにUIはDirectXでちまちまフルスクラッチで手書き
その代わりその辺のソフトに負けない速度で、4K対応 庶民には理解できなくても
プログラマであるあなたたちなら
ピン止めできるツリービューが如何に画期的か理解できると思うんだよね
タスクバーでも何でもピン止めの時代なのに
ツリービューもピン止めできて良いと思うのよね ああ、ツールバーとかスクロールバーとかのレベルで
全部フルスクラッチでDirectXで手書きだから >>901
来年にはSunOSにも移植される予定の超最新自動ビルドツールの紹介だよ! >>901
昔から使われている原始的といってよいビルドツールです
makefile に依存関係を書いておいて、コマンドラインで「 make -j」と起動すると、記述した依存関係にしたがってコンパイル・リンクが行われます Linuxなんかで配布されたソースから実行ファイルを作成したいって時にお世話になります >>904
この本を読めばコンパイルについても分かるの? >>906
>>900 は make を C で記述するものであり、コンパイル自体について記述するものではありません C++自体の本はたくさんあるのにビルドやプロジェクト構成について解説した本って全くないよな
コピペで受け継いできた秘伝のMakefileやconfigureが蔓延してるのなんとかしてくれ
売れないだろうがCMakeの解説本が一冊欲しい cmake はつい最近のVisual Studio 2017アップデートで標準インストールされるようになったから潜在需要あるかもね…。 なんでビルドツールっていつも怪物化しちゃうんだろうな
makeがもう誰も手に負えない怪獣のくせにずっと定番に居座ってて、「Makefileを作るツール」が乱立してそれぞれ怪物化してるの勘弁してほしい >>911
>makeがもう誰も手に負えない怪獣
make ですら怪獣になるのだったら、他の高機能ビルドツールはとっくに破綻している現状だったのか!と、ふと makefileなんて複雑な事求めないなら手でかけるレベルだよ
これが複雑で手に負えないとなると、プログラミングも怪しくなる ビルドについての教育がないがしろにされてるのが全ての元凶
ある程度以上の規模のプロジェクトを構成するベストプラクティスが示されているところを見たことがない
適当に好きなところから取ってきて動けばいいやくらいに改変して使ってるのが現状 丁寧に書いてるのはこれくらい。
ttp://aegis.sourceforge.net/auug97.pdf 複雑なことをしたいからビルドツールを使うわけでしてねぇ・・・ したいという意思があるなら、がんばって理解も出来るだろう
そこまでしなくても、最低限のルール覚えれば使える >>915
goto有害説をもじってるんだなw
Makefileを書いていていつも思うのは
ソースファイルの依存関係はソースファイルの中に書いてあるのに
それをまた二度手間で書かねばならないのがイヤ
面倒くさいのはともかく間違えやすいから >>918
automake とか gcc -MM とかの話? >>919
gcc -MMか、いいこと聞いた
ありがとう >>919
詳しい解説サンクス
こんなのがあったのか >>917
ここで根性論とはセンスあるわ
もちろんエンジニアでなく笑いの WindowsでCMakeはfind_packageでだいたい詰む
vcpkgで対応できなければ結局自分で書くはめになり、面倒くさくなってmingw使うかVSのプロジェクトと同居することになる C++ とは直接関係ないけど make/Makefile は擬似ターゲットを使って
バッチ的な定型処理を1個のファイルでまとめて管理できるのが便利でね。
make find WORD=...
全ソースから WORD= で指定した単語を含む行を検索、みたいな。
自分で作った便利ターゲットの使い方を usage: に書いとくのを忘れるけど。 C言語のビルドシステムならC言語で書けるようにするべきだと思うのだがよく分からない専用の言語を使わされるのは何故
この手のスクリプト言語は可読性がデバッガもないから中身を探るのが難しすぎる C++のビルドツールといえばboostでお馴染みのbjam
実質boost専用に作ってるだけなのにあんな聳え立つ糞の山になっちゃうんだからビルドツールって怖いね ソフト名がまだ決まっていないけどプログラム開発がスタートするって一般的だと思うんですが、
こういうときってコードネームを付けますよね?
このとき、VisualStudioのプロジェクト名もコードネームにしますよね?
アプリのウィンドウキャプションとかはアプリ名が決まり次第反映させられますけど、
プロジェクト名は途中で変えられないので、そのままになってしまいますが、しょうがないですよね?
要は社内の開発で問題なければOKで、
リリースしたときにコードネームがどこかに混じってしまわないように気を付ければいいだけですよね?
みなさんがどうされてるのか気になったのでお聞きしました。 必要なら変えるよ
slnやvcxprojはただのxmlだから名前変えるだけならそんなに難しくない 英国ポエムシリーズでしょう
bjam=ブージャムは言うまでも無く、パンジャンドラムすらも無論英国のポエムから採られた
他にも兵器界隈ではスナークとかが存在するのは周知の通り
日本だと仏教用語から採ればいいんじゃあないですかね >>932
なるほど〜、プロジェクト関連ファイルを編集することで名前を変えることはできるんですね。
なら気兼ねなく最初はコードネームにしときます。
ありがとうございました^^ std::ref() について教えてください
void f(:ostringstream &os) { ... }
int main() {
ostringstream s;
std::thread(f, std::ref(s));
...
とありましたが、なぜ呼び出し側で「おまじない」のstd::ref() が必要なのか理解できません
どんなときに呼び出し側で std::ref() が必要なのでしょうか?
テンプレート関係かと思いましたが
https://ideone.com/7fF53F
は問題なく、std::ref() が必要となるプログラム例を思いつくことができません
よろしくお願いいたします std::refの規格表とソースを見たか?
余計なコピーを抑制してるんだ。 非参照なテンプレートな引数に一時変数を作らずに参照を渡せる >>938
コメントありがとうございます
コピーコンストラクタが禁止されている std::cout をテンプレート引数にわたす場合で理解できました(かもしれません)
https://ideone.com/3eqEJY
一つ質問ですが、私なら、このプログラム例の y()
template<class T> void y((*f)(), T &os) { ... }
のように、テンプレートを書く時点で参照に書いてしまうのですが、
あえて非参照なテンプレート引数を書く「便利さ」みたいなものはありますでしょうか? >>939
>あえて非参照なテンプレート引数を書く「便利さ」みたいなもの
std::thread のコンストラクタを眺めていて気が付いたこと…これ、可変長テンプレートですね x86 の cmpxchg を使いたくて、gcc 拡張の __sync_val_compare_and_swap() を試していました
http://shinh.hatenablog.com/entry/20060817/1155781747
https://ideone.com/tpefmL
c++11 に std::atomic::compare_exchange_weak() を見つけましたが、これは適当に(任意に) new で確保したヒープにも適用できるものでしょうか? template <typename T, typename... ARGS>
class nested_error : public std::nested_exception, public ARGS...
{
public:
nested_error(T const& t, ARGS const&... args) : T(t), nested_error(args...) //C3511
{
}
nested_error(T const& t) : T(t)
{
}
};
何かうまい手ない? そりゃまー、実体化した内部ではTは決定済みだろうから無理だろう。
Anyつかうとか・・・。 あ、すまん。おかしなこと言った。
えーっと、変数が一個じゃ足りないな。
イニシャライザーリスト使うか、下位関数にキックするか。 そもそもコンストラクタの委譲は再帰禁止だったと思うが
別のクラステンプレートのメンバ関数とか関数テンプレートで再帰するしかないと思う そういえば、例外の時にメモリ確保したらなんか弊害あるんだっけ?
昔、例外投げるときはメモリが足りなかったりとかクリティカルな状況だからやめろって言われたような気がする。
どうやったっけ? >>948
なんか面白そうなのうpしてくれてありがとう
すまん、今かなり酔っ払ってる
素面に戻ってからじっくり読むから
ちょっと待ってて >>949
> そういえば、例外の時にメモリ確保したらなんか弊害あるんだっけ?
メモリー不足による例外発生時だとその例外処理時のメモリー確保自体が失敗するから例外処理(例えばログ出力)ができなくなるってこと >>951
そらまー、引数がそれの時はできるけど、必ず把握はしてないでしょ。
>>952
あぁ、なるほど。ありがとう。 >>952
メイヤーズ本に簡単な回避テクが書いてある
希ガス 真にご法度なのはデストラクタの中での例外発生なんじゃ… >>953
951だけど、何したいのか分からない。
catch (decltype(X) E)
ならええの? https://wandbox.org/permlink/uEH5L9KBV9L1BdYn
うはー、気が向いたから、コンストラクタに推論させようと思ったら手間食った。あー疲れた。
しかし、理解が深まって良かったかな。うえー。
>>956
投げた本人ならできるけど別のところから飛んできたやつはつかめなくない? しかし、色々試したが結局うまくいかず、解説ページの死角にぽろっとあるのが最高にリアル。 >>957
例えばA<B, C>とA<D>は全く別の型なのだから、どっちの型が飛んでくるかわからないのに両方catchするのは無理でしょ。
Base型で試そうとした痕跡があるけど、catchした先でA<B, C>またはA<D>の関数を呼び出そうとしているからそれもできない。
「別のところ」から飛んでくる例外の型はコンパイル時には確定しているのだから、メタプログラミングが通常やるように、「別のところ」のテンプレ引数でthrowする型を決定できるようにすればいいんじゃね? >>959
うん。多分それで困ると思う。>>944が!
メタプロやらないから可能性は感じるけど限界がわからない。
まぁ、俺は興味で書いただけだから、>>944がどうするかはシラネ・・・。 >>939
>あえて非参照なテンプレート引数を書く「便利さ」みたいなものはありますでしょうか?
threadの場合デフォルトで参照だとdata raceを気づかないで起こす可能性が上がる。
設計としてスレッドの引数はコピーして渡すほうが安全性は高い。
一般論で言えば一時オブジェクトを受け取るならconst&になるけど、
これだとmoveできないので逆に性能が劣化する場合がある。 最近の提案なんかではメモリ確保失敗は回復が難しく一般的な例外とは
区別して考えるのが合理的なんじゃないかって話が出てきてる。
んで新しく静的な例外を導入しようっていう話が上がってる。 >>962
コンパイルタイムで例外わかるんだったら、普通にコンパイルエラーにしよ? ヒープが無くなったら、HeapCreateで作れば良いのに。
by マリー・アンチョワネット メモリがどれくらい必要なのか簡単に静的解析できたらいいなあと思うけど
再帰関数のメモリ消費量とか計算難しそう mcc68kなんかは-Sでアセンブラ出力させると
コメントにスタック使用量を入れてくれてたな 割り込みになるけどちょっと質問させてください
struct hoge {
int a, b, c;
};
auto a = hoge{1, 2, 3};
auto b = int[]{1, 2, 3, 4};
aみたいに型を明示して中括弧でくくった一時オブジェクトは作れるけど、
bみたいに配列を明示して作ることって出来ないですかね?
単に文法上の質問なんで「やる必要あるのか」とか「std::array使え」とか「構造体でラップしろ」は無しでお願いします int[4]でもだめだったんですよね・・・・
というか今思いついて(int[4]){1, 2, 3, 4}でやったらいけました
お騒がしてすみませそ >>970
それはC99の複合リテラルになるけど、C++で使ってよかったっけ? warning: pointer is initialized by a temporary array, which will be destroyed at the end of the full-expression [-Waddress-of-array-temporary] https://ideone.com/A9Bccy
#include <stdio.h>
int main() {
int* b1 = {1, 2, 3, 4};
int b2[4] = {5, 6, 7, 8};
int b3[] = {9, 10, 11, 12};
fprintf(stdout, "b1:%u\n", sizeof(b1));
fprintf(stdout, "b2:%u\n", sizeof(b2));
fprintf(stdout, "b3:%u\n", sizeof(b3));
return 0;
}
https://ideone.com/rJw9cK
#include <iostream>
using namespace std;
int main() {
// int* b1 = {1, 2, 3, 4}; コンパイルエラー
int b2[4] = {5, 6, 7, 8};
int b3[] = {9, 10, 11, 12};
// cout << "b1:" << sizeof(b1) << std::endl;
cout << "b2:" << sizeof(b2) << std::endl;
cout << "b3:" << sizeof(b3) << std::endl;
return 0;
} c
b1:8
b2:16
b3:16
c++
b2:16
b3:16 >>976
自分が天才だと思っているなら、こんなところで遊んでないで、なんか凄いソフトを作ってくれよ。 オレは自分を天才とか思ってない
オレは天才じゃないが普通の人間だ
この板にいる低学歴知恵遅れが
まともじゃないのがヤバイといってるワケ
教育の程度や知能に大きな問題があるといってるわけ
しかもその自覚がない
まずまともな人間になるところから 誤解したまま帰った?
auto a=(int[4]){1,2,3,4};
for(int i=0;i<4;i++)
{
printf("%d \n",a[i]);
}
出力
0
0
0
0 あー、すみませんautoって書いたのがまずかったですね
試してみたんですが、実際にはコンストラクタに渡すので大丈夫でした
autoだと配列の一時オブジェクトへのポインタになるからまずいですね まったりとしてコクが無く、魚介類の生臭さを濃縮したような
スープと同じぐらい不味い >>948
お待たせ
俺っちの質問はnested_exceptionを使うケースなので、
948のコードでいうとBaseを多相的クラスにしといて
catch(Base&)で捕獲し、dynamic_castでBやCへの
アクセスを試みるというようなことだ
ところで
template<class... Ts> overloaded(Ts...)->overloaded<Ts...>;
これが読めん、何やってるのか教えてくれんか >>955
std::uncaught_exceptionというのがあるね >>987
クラステンプレートの引数の推論補助(deduction guide >>989
deduction guideね、thx わたくしがC++で書き上げた超高性能次スレ立てマシーンなら次スレなんて一発ですよ スレ番インクリメント機能はC++でも実装不可能なまでに困難な作業だったか
板復帰(OK!:Gather .dat file OK:moving DAT 703 -> 686:Get subject.txt OK:Check subject.txt 703 -> 690:Overwrite OK)0.84, 0.77, 0.74
age subject:690 dat:686 rebuild OK! このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 45日 2時間 48分 54秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。