[表示 : 全て 最新50 1-99 101- 201- 2ch.scのread.cgiへ]
Update time : 12/02 15:44 / Filesize : 56 KB / Number-of Response : 200
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part128



1 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 00:03:49.04 ID:Hj6igpz/.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ:
C++相談室 part127 echo.2ch.net/test/read.cgi/tech/1474636291/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

■ shared_ptr で 標準ライブラリのFILE構造体ポインタをラップしよう
class FILE_Ptr : public shared_ptr<FILE> {
 struct FILEDeleleter {
  void operator() (FILE* fp) const { if (fp != NULL) { fclose(fp); }}
 };
public:
 FILE_Ptr(FILE* fp = NULL) : shared_ptr<FILE>(fp, FILEDeleleter()) {}
 operator FILE* () { return get(); }
 template<typename T> bool operator == (const T& obj) const { return get() == reinterpret_cast<FILE*>(obj); }
 template<typename T> bool operator != (const T& obj) const { return get() != reinterpret_cast<FILE*>(obj); }
};

2 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 00:28:48.17 ID:1WWISKCd.net]
2

3 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 00:53:39.36 ID:oNxTNf5q.net]
前スレでSTLなんて使わない信用できないみたいな恐ろしいこと言ってるアホがいたが、そういう人って生配列、生ポ、for、whileで暮らしてるのかな
正気の沙汰ではない

4 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 00:59:26.69 ID:wer2Kop4.net]
C++の規格書に書かれているということはC++の一部なのであってそれを避けるというのはC++の機能の半分を使わないでいるということだ

5 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 00:59:39.65 ID:wlJLbi6+.net]
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

---- テンプレ ここまで ----

6 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 01:08:13.74 ID:42UX/YwI.net]
STLが時代遅れとかほざいてたな
モロにスタンダードで常に進化を続けているというのにな

7 名前:デフォルトの名無しさん [2016/11/27(日) 01:18:02.64 ID:0maVDSwR.net]
>>3, >>6
自社でSTLやboostより素晴らしいのを作っているじゃないか
日本企業のIT技術力は圧倒的世界一で、3流の外国製のライブラリ等は使用に耐えないって企業が多いから
そうなるんだろ

8 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 01:19:33.70 ID:MAcCGYLn.net]
STLは使ったことがないな
標準ライブラリのstd::vectorはよく使う

9 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 01:43:32.38 ID:wer2Kop4.net]
そうだな

10 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 02:11:39.36 ID:4hBpEO9s.net]
実際問題、コンテナクラスに汎用的な性能を求めることが間違ってる。
本当に速度が欲しい場合には選ばん。



11 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 02:16:56.70 ID:0maVDSwR.net]
>>10
本当に速度が欲しい場合はコンテナを自作しているんだろな

12 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 02:47:34.77 ID:wer2Kop4.net]
という奴が実際にvectorに対して明確に優位性のあるコンテナを作れたところを見たことがない
どうせそういった研究に取り組んだこともなく口だけなんだろうな

13 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 03:11:56.31 ID:Hj6igpz/.net]
STLはこれ以上速くなりようがないくらいに簡素な作りだと思いこんでいる私には、STLを上回る速度のコンテナ書く自信は全くないな。
私は圧倒的にスキルが不足しているから、要素をコピースワップするコストはついついshared_ptr使って対処してしまう。コンテナを自作できない無能な自分が嫌になるよ。

14 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 03:21:22.71 ID:411Nbo29.net]
使い方次第じゃないかなぁ
極端な話、vectorで毎回先頭に挿入するような使い方してたら遅くなるよね
どういうのか把握して適切なコンテナ選べるならわざわざ自作する必要はないかと

15 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 03:30:23.93 ID:Hj6igpz/.net]
私の場合、ついつい std::vector<T> ではなく、std::vector<shared_ptr<T>> を使って済ませてしまうので、いつまでたってもコンテナを自作するスキルが上がらないよ。
「ぼくのかんがえたさいきょうのこんてな」を自作する精神力がまだまだ足りないようだ。反省。

16 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 03:33:36.54 ID:wer2Kop4.net]
C++はコンテナの種類だけなら無駄に多いからな

17 名前:デフォルトの名無しさん [2016/11/27(日) 06:48:20.63 ID:pUctI5IC.net]
dequeとvectorは片方あればいいとかか

18 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 09:24:27.84 ID:SqUFXM7z.net]
>>11
vectorはただのガワなんだから、速度が必要ならallocatorだけ自作すりゃいいだろ

19 名前:デフォルトの名無しさん [2016/11/27(日) 09:29:56.70 ID:WW/pNH6a.net]
連続性が保証できないから。

20 名前:デフォルトの名無しさん [2016/11/27(日) 09:53:11.77 ID:Hj6igpz/.net]
任天堂の倒し方知ってる系の人なら、当然のようにSTLを否定するだろう。
私は任天堂の倒し方知らないので、こういう人たちを心の底から尊敬する。



21 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 10:42:14.10 ID:P/uIEXU4.net]
>>20
なぜそこまでSTLを否定したいのかよこ分からないなあ。
多くのケースで多くの人が使うのに必要十分な程度の機能、性能は持ってる訳だし、標準ライブラリとしては妥当な仕様かと思う。
これで不足な場合だけ自作のコンテナなりを考えればいいだけでしょ。

22 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 10:58:23.07 ID:Uyh6ikI3.net]
>>8
何をいってるのか、意味不

23 名前:デフォルトの名無しさん [2016/11/27(日) 11:06:06.35 ID:l9GcbBcF.net]
いつものあれだろ?
「標準仕様書中の表現として、STLあるいはstandard template libraryなどという言葉は一回も使用されていない」
って言う。

厳格にこの言いつけを守ってる人がいるんだよ…

24 名前:デフォルトの名無しさん [2016/11/27(日) 11:26:05.74 ID:Hj6igpz/.net]
「STLのコンテナでは力不足」と言い切る優れたプログラマになりたいのだが、私はちっともそのレベルに到達できない。orz

25 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 11:37:32.43 ID:zdOfPVrj.net]
婆ちゃんがイオンのことを今でもジャスコというのを聞くとちょっとイラッとする
STLという単語をみると同じような気持ちになるが
老人に新しいことを覚えさせるのが難しいと知っている俺は
そしらぬ顔で静観することにしている

26 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 11:39:37.56 ID:wer2Kop4.net]
>>19
また古代からタイムスリップしてきた人ですか?

27 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 11:44:52.34 ID:qE9zLQzg.net]
>>24
それ、優れたプログラマじゃない可能性がたっぷりある。

28 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 11:48:02.44 ID:MAcCGYLn.net]
標準ライブラリは速くなる余地が無いわけではないな。
テンプレート特殊化を書いてやらないと解決出来ないときもある。
Visual C++の標準ライブラリが最近見直したら一部の処理が何十倍も速くなったと言っているくらいだ

29 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 11:56:08.91 ID:wer2Kop4.net]
そりゃ実装依存のところは多い
規格書に事細かに記されているわけではない
しかしそれはコンテナのような昔からあって仕様がシンプルなクラスのことでは無いだろう

30 名前:デフォルトの名無しさん [2016/11/27(日) 12:10:55.75 ID:Hj6igpz/.net]
以下の文書によると、basic_string のパフォーマンスが改善され、std::vectorをオーバーホールとか。
マイクロソフトの連中は、このスレでSTLを否定する優秀な人のような英断ができず、いまだにSTLの保守をやってる。
このスレでSTLを否定する優秀な人を一本釣りしてマイクロソフトにスカウトすればいいのに、マイクロソフトは見る目がないな。

What's New for Visual C++ in Visual Studio 2017 RC
https://docs.microsoft.com/en-us/cpp/top/what-s-new-for-visual-cpp-in-visual-studio



31 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 12:12:18.35 ID:MAcCGYLn.net]
>>29
>規格書に事細かに記されているわけではない

突然関係ないことを言い出してどうした?
コンテナー自作する必要が有ったと主張する人に対してその必要性が全く理解できないという人がいたので
可能性はを示唆しただけだが。

32 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 12:14:02.11 ID:LAFeCFqG.net]
algorithm系は使うもの使わないものがはっきりわかれない?

33 名前:デフォルトの名無しさん [2016/11/27(日) 12:17:16.89 ID:Hj6igpz/.net]
このスレは何人も天才プログラマが書き込んでるんだな。
STLで十分と思ってしまうレベルの低い私は、己の無能さで嫌悪感に陥りそうだ。

34 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 12:17:28.71 ID:wer2Kop4.net]
>>30
C++のベンダーをやっている以上保守は義務だろ
MS独自のMFCはあまりにもゴミだが
CMapを使おうと思ったらあまりにも低機能すぎてキーボード破壊しそうになった

35 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 12:28:42.78 ID:plVb52Pg.net]
>>32
adjacent_differenceの悪口はよせ

36 名前:デフォルトの名無しさん [2016/11/27(日) 12:41:27.00 ID:Hj6igpz/.net]
怠惰で無能な私は、bool で存在有無だけを返すストイックな binary_search() を使いこなせない。
ついつい、upper_bound()やlower_bound() を使ってしまう。
STLで事足りると思ってしまう自己暗示からどうしても抜け出せない。
このスレの天才プログラマーのようにSTLを捨てて「ぼくのかんがえたさいきょうのこんてな」に行くべきなのだが。

37 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 13:18:21.08 ID:+eKpaGRF.net]
STLはあくまで汎用的で問題が起こりにくい作りになっているから
プログラムの用途に合った特殊なコンテナってことなら
自作する意味はあるかもしれない
例えば要素を削除するときに前詰めしないコンテナ、とか
そのコンテナには、どこが「空き」になっているか、別途把握できるしくみが
必要だけど、それはそういう風に実装すればよいだけだし
要は、連続的なメモリに確保されるけど、歯抜けになることが許されるコンテナ
ただしそんなに速くならないだろうね

38 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 13:55:49.85 ID:eIL19TgX.net]
>>1は無能
自分で書いておきながらワッチョイ付けられないわ
ウンコード貼り付けるわ

39 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 14:11:24.54 ID:LAFeCFqG.net]
>>36
むしろequal_rangeしか使わない

40 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 14:12:23.15 ID:Hj6igpz/.net]
>>38
全くその通り。無能。恥を知れって感じ。



41 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 14:50:05.59 ID:w634zOe4.net]
今時STLはないだろ

42 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 15:08:20.29 ID:P/uIEXU4.net]
>>33
STLで十分と思うことは、別にレベルが低いとはならない。
STLで十分と思うことがレベルが低いというのは、レベルが低いと思う。

自分を卑下する書き込みをしつつ、高尚なこと考えている俺カッケーと酔いしれてないか?

43 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 15:26:29.03 ID:BLqqs723.net]
それは己ちゃうんかいw

44 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 15:55:56.37 ID:3Qbc/l9n.net]
>>42
ド素人の背伸びなんだからほっといてやれよw
下手につつくと居付いちゃうぞ

45 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 15:56:46.93 ID:SqUFXM7z.net]
>>37
それってlistじゃないの?

46 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 15:57:37.51 ID:SqUFXM7z.net]
>>45
失礼連続前提ね

47 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 16:32:55.67 ID:42UX/YwI.net]
理解出来ないと時代遅れと言って反応を見ているんだろうが端から見ていて痛々しい限りだ

48 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 16:49:01.91 ID:2ZVZJ+KM.net]
STLが理解できない?
お前さんだけじゃねw+

49 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 17:08:21.71 ID:LAFeCFqG.net]
コンテナ、イテレータ、アルゴリズムの組合せ、という根っこにある考え方でまあ上手く行ってたんだけど、
今となってはちょっと古びた感じはするね。
<algorithm>のごちゃついた様を見るとそういうふうに思う。

50 名前:デフォルトの名無しさん [2016/11/27(日) 18:02:33.78 ID:Hj6igpz/.net]
>>42 のような面白い返答があったのでそろそろ真意を正直に書くと、
コンテナ自作派に憧れるていを取りつつコンテナ自作派をバカにしてただけだ。

「任天堂の倒し方知ってる」とか「ぼくのかんがえたさいきょうのこんてな」とか例えてる時点で
コンテナ自作派をバカにしてると君らに察してもらえるだろうと思ってたのだが、
本当にコンテナ自作派に憧れているとストレートに解釈した人が出てきて楽しかったわ。

>>37
「空き」の定義は開発者が決めなければならない。
コンテナに突っ込むクラスに「空き」フラグを扱うメンバ変数を追加すればSTLコンテナ利用で解決することを
わざわざ車輪の再発明でコンテナまで自作する人をおだててバカにするのは実に楽しい。



51 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 18:11:22.15 ID:MAcCGYLn.net]
>コンテナ自作派をバカにしてると君らに察してもらえるだろうと思ってた

これは思った。気付かない奴はアスペ

52 名前:デフォルトの名無しさん [2016/11/27(日) 19:37:37.43 ID:YEwu7XTV.net]
俺も諄いなーと思いつつ黙って見てたけど、ストーレートに解釈してるやつが居るのみてビックリしたのと同時に、こんなに純真な心で2chやってて大丈夫なのかと心配になったわ。
あと、だからこのスレよく荒れてるんだなぁと納得した。

53 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 19:49:28.80 ID:4JtqQJ1X.net]
ゲームとかなら、汎用性よりスピード命や小メモリとかで俺会社のSTLを作ってそうなきがするが
ゲーム制作会社とかではしているところはないのかな

>>1 はなんでshared_ptrのFILE deleterを張っているんだ
C++ならFILEじゃなくfstreamだろって気がするが

54 名前:デフォルトの名無しさん [2016/11/27(日) 20:14:35.31 ID:Hj6igpz/.net]
>>53
あまりにも ID:Hj6igpz/ が無能すぎて fstream を使いこなせないからだよ。みなまで言わせんな恥ずかしい。
アホな ID:Hj6igpz/ は>>1 のラッパークラス FILE_Ptr を使って以下のように稚拙なコードを書く傾向がある。
こんなことやってるからいつまでたっても ostream系を使いこなすスキルが育たない。ID:Hj6igpz/ は C++プログラマに向いてないよ。

 {
  FILE_Ptr fp = fopen("foo.log", "w");
  if (fp != NULL) {
   fprintf(fp, "1hello world\n");
   fputs("2howdy world\n", fp);
   fwrite("3hello world\n", 13, 1, fp);
  }
 }

55 名前:デフォルトの名無しさん [2016/11/27(日) 20:42:29.48 ID:pUctI5IC.net]
fstreamはfstreamで20余年の付き合いを経てもいまだにイミフなとこあるし

56 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 20:47:34.07 ID:P/uIEXU4.net]
>>50
お前さんの真意とやらはどうでもいいから、面倒くさいことせずに、初めからもっと直接的に意味のある議論をしてほしい。
ここまでの流れで唯一ためになったのは、>>52のレスにあった「諄い」という漢字を知ったということだけだ。

57 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 20:49:47.24 ID:P/uIEXU4.net]
>>53
ゲーム会社のことはよく知らないけど、そういうのはアロケータの自作でもしてるのかな。

58 名前:デフォルトの名無しさん [2016/11/27(日) 21:04:15.44 ID:zEm283RN.net]
ゲームエンジン・アーキテクチャによると
コンテナを自作するのは普通らしい

59 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 21:13:33.19 ID:kJvliJ+f.net]
>>54
それ以前に、FILE"Deleleter"ってわざとしているのか
それともdeleteのスペル知らないのか
deleteはC++のキーワードだよな
operator FILE* () はcons抜けだし

60 名前:デフォルトの名無しさん [2016/11/27(日) 21:46:20.25 ID:Hj6igpz/.net]
>>59
何しろ無能だからこんなもんだろう。生温かく見守ってやれ。



61 名前:デフォルトの名無しさん mailto:sage [2016/11/27(日) 21:54:20.66 ID:IYfuOepr.net]
>>53
有名なのだとEASTLでオープンソース化されてる

ttp://i-saint.hatenablog.com/entry/20101012/1286822888

ttps://github.com/electronicarts/EASTL

62 名前:デフォルトの名無しさん [2016/11/27(日) 21:59:03.95 ID:WW/pNH6a.net]
ベンチ取ってみたらどうか。
僕の古典的PCしかもノートでも驚くほど速い。
意外と問題にならない程度の速度を持っているのではないか。

63 名前:デフォルトの名無しさん [2016/11/27(日) 22:00:05.48 ID:Hj6igpz/.net]
>>59
勉強する良い機会になった。ありがとう。
https://ja.wikipedia.org/wiki/Cons

64 名前:デフォルトの名無しさん mailto:sage [2016/11/28(月) 00:27:42.27 ID:nFYh94sG.net]
type erasureのためだけにshared_ptrを持ち出さなければならないクソ言語

65 名前:デフォルトの名無しさん mailto:sage [2016/11/28(月) 13:41:28.68 ID:VFe8unWC.net]
SSEのイントリンシック使うとき16バイト境界にアライン必須なんで
stlに入れるとき用にアロケータだけ自作したことはあるな(コンテナの型自体変わってしまうので不便だけど
EASTLは知らんかった、家帰ったら使ってみよう

66 名前:デフォルトの名無しさん [2016/11/28(月) 17:31:28.84 ID:w/GpYaDf.net]
>>61
docディレクトリの文書でEAの中の人がSTLについて熱く語っているのが好感を持てた。

67 名前:デフォルトの名無しさん [2016/11/28(月) 21:08:56.39 ID:w/GpYaDf.net]
EASTL にベンチマークプログラム があったのでWindows10(x86)の Visual Studio 2017 RC でビルド&実行してみた。
以下は、そのベンチマークプログラム EASTLBenchmarks.exeの標準出力結果

****************************************************************************************
EASTL Benchmark test results
****************************************************************************************

EASTL version: 3.04.00
Platform: Windows on X86
Compiler: Microsoft Visual C++ compiler, version 1910
Allocator: PPMalloc::GeneralAllocator. Thread safety enabled.
Build: Full optimization. Inlining enabled.

Values are ticks and time to complete tests; smaller values are better.

Test VC++ Dinkumware EASTL Ratio Difference?
---------------------------------------------------------------------------------------------------------------------
algorithm/adj_find/vector<TestObject> | 699814 699.8 us | 913513 913.5 us | 0.77 -
algorithm/copy/vector<LargePOD> | 270367 270.4 us | 269001 269.0 us | 1.01
algorithm/copy/vector<uint32_t> | 8193 8.2 us | 5462 5.5 us | 1.50 +
algorithm/copy_backward/vector<LargePOD> | 280267 280.3 us | 274463 274.5 us | 1.02
algorithm/copy_backward/vector<uint32_t> | 3072 3.1 us | 3414 3.4 us | 0.90
algorithm/count/vector<uint64_t> | 270367 270.4 us | 266271 266.3 us | 1.02
algorithm/equal_range/vector<uint64_t> | 10268141 10.3 ms | 22004184 22.0 ms | 0.47 -

68 名前:デフォルトの名無しさん [2016/11/28(月) 21:12:50.29 ID:w/GpYaDf.net]
>>67 の続き。途中省略で末尾だけ記載する。

vector<AutoRefCount>/erase | 2132212 2.1 ms | 2128798 2.1 ms | 1.00

vector<MovableType>/erase | 124073512 124.1 ms | 121713608 121.7 ms | 1.02
vector<MovableType>/reallocate | 2317236 2.3 ms | 2053355 2.1 ms | 1.13

vector<uint64>/erase | 11193260 11.2 ms | 11209646 11.2 ms | 1.00
vector<uint64>/insert | 9193159 9.2 ms | 9221835 9.2 ms | 1.00
vector<uint64>/iteration | 68957 69.0 us | 68957 69.0 us | 1.00
vector<uint64>/operator[] | 106166 106.2 us | 86368 86.4 us | 1.23
vector<uint64>/push_back | 2452078 2.5 ms | 1394507 1.4 ms | 1.76 +
vector<uint64>/sort | 8286133 8.3 ms | 7735840 7.7 ms | 1.07

sum | 871753892 871.8 ms | 768601049 768.6 ms | 1.13

****************************************************************************************

Time to complete all tests: 3.66 s.
RETURNCODE=0

69 名前:デフォルトの名無しさん [2016/11/28(月) 21:22:19.20 ID:w/GpYaDf.net]
>>68の続き。
188個あったテスト項目のうち、71個がEASTL有利、10個がSTL有利、107個が互角という結果になった。
以下に、参考までにEASTL有利だった項目を良い成績順にベスト10を記す。

algorithm/find_end/string/end | 600816 600.8 us | 25945 25.9 us | 23.16 +
deque<ValuePair>/push_back | 5864095 5.9 ms | 880058 880.1 us | 6.66 +
deque<ValuePair>/push_front | 6016006 6.0 ms | 1031627 1.0 ms | 5.83 +
deque<ValuePair>/operator[] | 4007712 4.0 ms | 693327 693.3 us | 5.78 +
hash_map<uint32_t, TestObject>/count | 264563 264.6 us | 56326 56.3 us | 4.70 +
deque<ValuePair>/find | 1577482 1.6 ms | 381996 382.0 us | 4.13 +
algorithm/find_end/string/middle | 579650 579.6 us | 148497 148.5 us | 3.90 +
string<char8_t>/operator[] | 133476 133.5 us | 34820 34.8 us | 3.83 +
string<char16_t>/operator[] | 133477 133.5 us | 35844 35.8 us | 3.72 +
algorithm/lex_cmp/schar[] | 137914 137.9 us | 39941 39.9 us | 3.45 +

70 名前:デフォルトの名無しさん [2016/11/28(月) 21:47:38.32 ID:w/GpYaDf.net]
>>69の続き。上述のランキングをさらに11位から25位まで追記しておく。

algorithm/search/string<char> | 934678 934.7 us | 285728 285.7 us | 3.27 +
algorithm/rotate/vector<TestObject large> | 161470 161.5 us | 58716 58.7 us | 2.75 +
hash_map<uint32_t, TestObject>/operator[] | 343762 343.8 us | 129722 129.7 us | 2.65 +
hash_map<uint32_t, TestObject>/find | 177172 177.2 us | 67250 67.3 us | 2.63 +
map<TestObject, uint32_t>/clear | 90805 90.8 us | 35162 35.2 us | 2.58 +
string<char16_t>/swap | 78515 78.5 us | 30723 30.7 us | 2.56 +
bitset<1500>/count | 14115750 14.1 ms | 6574833 6.6 ms | 2.15 +
hash_map<string, uint32_t>/count | 946967 947.0 us | 443784 443.8 us | 2.13 +
deque<ValuePair>/insert | 28192924 28.2 ms | 13517665 13.5 ms | 2.09 +
bitset<75>/count | 1468243 1.5 ms | 700838 700.8 us | 2.09 +
string<char16_t>/insert/pos,p | 1060986 1.1 ms | 513424 513.4 us | 2.07 +
hash_map<string, uint32_t>/find_as/char* | 947992 948.0 us | 461194 461.2 us | 2.06 +
string<char16_t>/find/p,pos,n | 66859496 66.9 ms | 33442208 33.4 ms | 2.00 +
bitset<75>/flip | 400772 400.8 us | 200727 200.7 us | 2.00 +
set<uint32_t>/count | 1733147 1.7 ms | 870841 870.8 us | 1.99 +



71 名前:デフォルトの名無しさん mailto:sage [2016/11/28(月) 22:16:01.54 ID:aUTLhSnb.net]
キモッ

72 名前:デフォルトの名無しさん mailto:sage [2016/11/28(月) 22:29:08.06 ID:nxkexmqL.net]
EASTLにコンテナの範囲外アクセスチェックとかのデバッグ機能ってある?
自分でもやってみるけど知ってる人いたら教えて欲しい

73 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 03:57:58.52 ID:JKfAWAo3.net]
C++派八策

1.C++で書けばパフォーマンスが良くなる。なぜならパフォーマンスが良くなるまでC++書くからだ。
これを頭に叩き込め。

2.常にC++で書いておればそのうち他の要因でパフォーマンスが良くなるときが来る。
そのときに思い切りC++の手柄を主張しろ。

3.いいことはC++の手柄、悪いことは他の要因のせいにしろ。

4.データは都合のいいところだけ使え。グラフは切貼りしろ。

5.タイムラグを上手く使え。

6.「これがC++だ」と明言するな。定義を問われたら「C++の本を読め」と言っておけ。

7.批判されたら「お前はC++を理解してない」と言え。

8.いざとなったら定義を変えろ。オブジェクト指向に固執するな。

74 名前:デフォルトの名無しさん [2016/11/29(火) 06:49:46.04 ID:nF3eDud1.net]
boost spiritって
LL(∞)パーサー生成すんの?
PEGパーサー生成するの?
LL法とPEG法wikipedia両方の実装例にこの名前のってあるんだけど
それとも両方とも実装してるの?

75 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 10:54:07.14 ID:FnERKnae.net]
菅官房長官「ちょっと何言ってるかわかんない」

76 名前:デフォルトの名無しさん [2016/11/29(火) 13:08:19.85 ID:nF3eDud1.net]
4行目の「法」と「w」の間に格助詞の「の」が入る予定でした

77 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 13:44:34.04 ID:CM7LOPnj.net]
プログラム的にいうと
LLは実装で使うアルゴリズムのひとつ
PEGは仕様を定義する表現(言語)のひとつ
で対立・排他関係にあるわけではない

boost.spiritはPEG形式で与えられたルールから構文解析器を作成するライブラリ
(作成された解析器はLL法で入力を解析する)

78 名前:デフォルトの名無しさん [2016/11/29(火) 18:41:17.09 ID:nF3eDud1.net]
>>77
ど素人の私にわざわざ回答をくださってありがとうございます。
これからも勉強に励みます

79 名前:デフォルトの名無しさん [2016/11/29(火) 18:46:41.16 ID:GF2v+9TM.net]
boost spiritってEBNFじゃなくてPEGだったんだな
使わんからどうでもいいが

80 名前:デフォルトの名無しさん [2016/11/29(火) 20:31:51.74 ID:baTvYruL.net]
いま趣味で囲碁ソフト作ってるんだけど
Cなんすよ。
いろいろ面倒なんでC++で
作りなおそうかと思案中です。

作成の労力は何割ぐらい
軽減するでしょうか?



81 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 20:47:31.45 ID:DmRk6e1B.net]
増す

82 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 20:55:01.08 ID:1SK7brxW.net]
その質問に答えられる人は誰一人としていないが
少なくともCより面倒になることは(熟練したC++プログラマなら)ありえないから
チャレンジしてみる価値はある
ただし、()の中が重要で、熟練したプログラマなら、という話
君がすごく筋がよいならC++はきっと役に立つはず
一方で筋が悪いというのはC++においては余計なことをやろうとすること
余計なことさえしなければ、Cより面倒になることはあり得ないし
逆に心に邪念があれば、Cとは別の意味で面倒な樹海に迷い込む
C++は書く人の心の中を映す鏡

83 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 21:09:35.06 ID:glNciwx+.net]
Haxe(ヘックス)はOSSで、JSに型チェックを付けたような言語で(altJS)、
JS(ES5), Flash, PHP, C++, Java, C#, Python に書き出せる。
Windows8.1対応。IDEは、FlashDevelop

このサイトで、ブラウザでプログラミングして、実行できる
Try Haxe !
try.haxe.org/

Haxeプログラミング入門、尾野政樹、2015

84 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 21:16:52.64 ID:bPmZgvzu.net]
>>83
このコピペ時々見るけどヘイトHaxeの効果抜群だな

85 名前:デフォルトの名無しさん [2016/11/29(火) 21:19:45.31 ID:X8I97SOu.net]
>>80
レートどんくらい?
いちおープラスなんか?

86 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 21:24:49.77 ID:Ofu9bBqm.net]
>>84
せやな。Mindに手を出すわ

87 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 21:42:26.41 ID:8ZPVrbbC.net]
>>80
お前の能力によるとしか言えないんじゃないのか
ソースコードの量が多いと今のCをC++へ作り直す工程はかなりの労力だろな

88 名前:デフォルトの名無しさん mailto:sage [2016/11/29(火) 21:44:01.60 ID:ua9E/pwR.net]
いや、>>80は絶対にC++で書き直すべきだ!!

89 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 06:56:30.70 ID:UPCsGfLr.net]
C++を「Cにvectorとかstringなんかの便利な型を追加した言語」と
割り切って使うなら手間は増えないんじゃないかな。

でも実際にC++で書き始めると、C++らしい書き方をしないと
恥ずかしいみたいな気持ちになって深みにはまることが多い。

90 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 07:12:30.65 ID:HOaAIIiu.net]
>>80がgithubにソースを晒せば解決



91 名前:デフォルトの名無しさん [2016/11/30(水) 07:35:10.92 ID:60EZvxwk.net]
三割くらい減る

92 名前:デフォルトの名無しさん [2016/11/30(水) 08:50:24.62 ID:AmbpRVJT.net]
Cでいったん書いたんなら、そのときの反省点が色々あるだろ
それを踏まえてより上手くまとめるにはC++はいいツールだぜ

93 名前:デフォルトの名無しさん [2016/11/30(水) 09:01:18.76 ID:WcEJDmm/.net]
ぼくのかんがえるC++にしかできない超強力3大機能。
・自動的なデストラクタ呼び出し。
・moveコンストラクタと右辺値参照。
・ラムダ。

94 名前:デフォルトの名無しさん [2016/11/30(水) 09:03:12.26 ID:WcEJDmm/.net]
下の根の乾かないうちに訂正。

ぼくのかんがえるC++にしかできない超強力3大(5大?)機能。
・自動的なデストラクタ呼び出し。
・moveコンストラクタと右辺値参照。
・templateとlambda。

95 名前:デフォルトの名無しさん [2016/11/30(水) 09:05:34.45 ID:WcEJDmm/.net]
exceptionとRTTIはよく使うけど次点。

異論反論はもちろん認める。

96 名前:デフォルトの名無しさん [2016/11/30(水) 09:15:29.34 ID:60EZvxwk.net]
RTTIは使わないな
使うなって偉い人が言ってるし

97 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 09:19:23.91 ID:mG9+BxSG.net]
なんで?(殺意)

98 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 10:01:29.94 ID:2V+M5QrA.net]
RAIIの間違いじゃね?
RTTIをよく使うって違和感ある。

99 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 10:25:44.68 ID:TMG+JuRV.net]
話題になっていた
STLと標準ライブラリと違うもの?

100 名前:デフォルトの名無しさん [2016/11/30(水) 11:41:28.64 ID:AmbpRVJT.net]
typeidをデバッグや実験でなく実用で使ったことが確かにないなあ
C++例外は嫌々しぶしぶ使ってるけど、クソすぎてため息



101 名前:デフォルトの名無しさん [2016/11/30(水) 12:37:13.96 ID:60EZvxwk.net]
例外ってなんか悪い部分あるの?

102 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 12:51:41.03 ID:zOzS6ENl.net]
???部にどの様な記述でコンパイルできるのですか?

#include <iostream>
#include <vector>

template<class T>
class Point{
public:
    Point(T x,T y):m_x(x),m_y(y){}
private:
    T m_x;
    T m_y;
};

int main( int argc, char *argv[] )
{
 Point<int> p1(0,0);
 Point<double> p2(0.0,0.0);
    
    std::vector<Point<???>> vpoints;
    vpoints.push_back(p1);
    vpoints.push_back(p2);
 return 0;
}

103 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 13:02:54.90 ID:7bek9hnS.net]
エラーメッセージは?

104 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 13:08:22.75 ID:0DxS4g7L.net]
親クラス用意しなきゃ無理じゃね?

105 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 13:16:41.10 ID:7bek9hnS.net]
あ、今意味がわかった
それやるならunion用意するかな
そもそも同じvectorにする意味がわからないけど・・・

106 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 13:21:49.66 ID:TMG+JuRV.net]
>>105
プログラム的に意味があるかどうかなんか問題ではないだろ
それ言い出したら、

push_backした後なにもせずにプログラムが終了しているんだから
push_backする必要ないだろ

107 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 13:47:54.21 ID:kcnEUqeY.net]
>>102
そこをどの様に記述してもコンパイルはできない

そのPoint<int>とPoint<double>はそれぞれなんの関係もない独立した型であって
相互に変換や代入などはできないから

108 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 14:23:43.41 ID:X0PK+rS4.net]
>>99
STLは前世紀にどこかのメーカーが作ったライブラリ
便利なので広まって標準ライブラリの礎となった
最新のバージョンは3.3で今でもダウンロードできる
対応する環境はMS C++ Ver.5とかgcc 2.9とかだと思う

109 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 14:26:14.29 ID:TMG+JuRV.net]
標準ライブラリっていってもパクリってこと?

110 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 15:43:30.08 ID:tnQQtKaj.net]
パクリでもなんでも、便利そうなものは標準に取り入れる意味があるんだよ
さもなくば、コンパイラごとに違ったSTLとか嫌だろ



111 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 16:25:16.47 ID:34Y1lEhk.net]
C++例外は、明らかにJavaやC#のそれに比べて親切度において劣る。
どこからジャンプしてきたかの呼び出し履歴をとれないのはあまりに大きい。

112 名前:デフォルトの名無しさん [2016/11/30(水) 16:53:47.96 ID:34Y1lEhk.net]
EASTLを Visual Studio 2017 RC で使って感じたこと。
 ・なるほど少し速いかも、なレベル。悪くない。むしろ良い。
 ・仕事ではなく趣味や学習目的で扱う分には、手本としてもオススメできる。
 ・既存のstdとeastlを混在利用することは可能だが要注意。
 ・EASTLに限らずテンプレートの宿命だが、プログラマ側ソースコードのどの箇所がエラー原因なのか場所を特定しずらい。

具体的に困ったこと。いずれも対策を講じて解決済み。
 ・eastlで作ったコンテナをうっかり std::random_shuffle() にいれると、どのライブラリの swap() を呼ぶかコンパイラがわからずエラーになる。
  eastl::shuffle()に置き換えて、第三引数の乱数生成器は stdの<random>の乱数生成器を使って対処した。
 ・eastl::make_shared<>(args...) で Gdiplus::Bitmapの梟雄ポインタのインスタンスを作ろうとすると 引数2つ渡すGdiplus::GdiplusBaseのnew演算子が定義されてないとかで、エラーになる。
  従来通り、new Gdiplus::Bitmap(...) で作ったものを渡して対処した。

113 名前:デフォルトの名無しさん [2016/11/30(水) 17:29:43.03 ID:AmbpRVJT.net]
noexceptがデフォじゃないのが許せん

114 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 19:00:58.85 ID:j7/lwSC0.net]
>>109
標準化ってのは独自性の有る新たなものを産み出すんやなくて
世に存在する既存のものの統一を図るのが本来やで

115 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 19:08:39.22 ID:TMG+JuRV.net]
>>110
コンパイラごとにSTLの実装は違いますけど?

VC++、gcc、clang、C++builderで実装が同じだと思ってました?w
                   ~~~~~

116 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 19:33:15.69 ID:tnQQtKaj.net]
誰が実装が同じだといった?
規格の話しているのに、なんで実装の話が出てくるのか謎なんだが

117 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 19:46:20.54 ID:TMG+JuRV.net]
>>116
おまえ頭おかしいのか?
己が書いたものを100回復唱してみろよ

> 誰が実装が同じだといった?
> 規格の話しているのに、なんで実装の話が出てくるのか謎なんだが

118 名前:デフォルトの名無しさん [2016/11/30(水) 19:54:56.69 ID:34Y1lEhk.net]
規格がまずあり、開発環境がそれをちゃんと守ってるかどうかは実装を見て確かめる。
規格の話だけするのなら、そもそもコンパイラや実行環境さえ必要なくて、日本の自称・憲法学者(笑)のように紙とペンだけで済む。
規格と実装、両方の話をするのが正しい。

119 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 20:16:34.70 ID:SxJugRcT.net]
規格の話しているのに、なんで実装の話が出てくるのか謎なんだが?

120 名前:デフォルトの名無しさん [2016/11/30(水) 20:22:51.93 ID:wWCievJu.net]
実装はコンパイラ毎に違うに決まってんだろ



121 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 20:43:04.57 ID:TMG+JuRV.net]
>>110
を読んでみろ

122 名前:デフォルトの名無しさん [2016/11/30(水) 20:50:12.38 ID:o1dhiyLy.net]
.
.
■■人間性に批判殺到 あの悪質パクツイ垢 @copy__writing の管理人は東京都三鷹市の莉里子■■
i.imgur.com/5qAgsHG.png
i.imgur.com/kldi84l.png
i.imgur.com/8vCymiC.jpg


■今までのプライベート垢
@riricoco0
@bibliophilia333
@muzimuzi333
@nekomatagensou
@hanasoraumimori
@mirainosekai3
@zibanyan666
@parlorchild
@liliririko
@EriotN
@mike_peko
@riricoco0
@ririko_neko
@nyanpas ※1
@telegraphyneko


@riricatputi (新アカ)  imgur.com/a/X1vQA


100垢以上作ってるキチガイ出会い厨 (粘着やめろ詐欺師!はやく捕まれホラ吹きネットストーカー犯罪者!!)

123 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 21:00:50.51 ID:SxJugRcT.net]
質問とか罵倒とか〜を読めとかじゃなくて自分の主張をすれば一発で終わることを

124 名前:デフォルトの名無しさん [2016/11/30(水) 21:13:12.45 ID:34Y1lEhk.net]
実装の定義がマチマチ。
ある人はプロプロセッサ処理前のソースコードという意味で。
ある人はプロプロセッサ処理後のソースコードという意味で。
ある人はコンパイル後のobjバイナリという意味で。
ある人はビルド後の実行バイナリという意味で。

125 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 21:39:54.28 ID:tnQQtKaj.net]
ID:TMG+JuRV がなぜ発狂しているのか謎なんだが

---
パクリでもなんでも、便利そうなものは標準に取り入れる意味があるんだよ
さもなくば、コンパイラごとに違った(規格の)STL(モドキ)とか嫌だろ
---

126 名前:デフォルトの名無しさん [2016/11/30(水) 21:56:08.67 ID:pYpq7m+B.net]
一番頭おかしいやつが降臨しました>>124

127 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 22:24:40.10 ID:1zLD/kv4.net]
パクリとかw
開発者本人が標準化委員会に提案したんだぞ

128 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 23:42:37.82 ID:lwghcYzA.net]
ID:TMG+JuRV がなぜ発狂しているのか一瞬分からなかったが>>108-110を読み直して理解した
>>110の説明の日本語がよろしくない

129 名前:デフォルトの名無しさん [2016/12/01(木) 00:10:57.08 ID:SwKXepyG.net]
PCRE という正規表現ライブラリが存在する。
これをSTLのregexと同じインターフェースでラップした場合、STLと呼べるだろうか?

130 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 00:14:57.78 ID:rFASmZLg.net]
regexはSTLなのか
threadをSTLと言ってる人も見かけたし何でもありだな



131 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 00:18:17.94 ID:O3rxu16z.net]
つまり
STLという言葉を使う奴=バカ
ハゲもその一人

132 名前:デフォルトの名無しさん [2016/12/01(木) 00:23:12.22 ID:SwKXepyG.net]
>>130
指摘ありがとう。
regex はあくまでstdに採用されたのであってSTLではなかった。訂正します。

133 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 00:27:51.92 ID:9RDsFVMO.net]
stdは「スタド」と発音すべき

134 名前:デフォルトの名無しさん [2016/12/01(木) 00:37:39.97 ID:SwKXepyG.net]
studio をスタジオと呼ぶ日本語の舌なのに、あろうことか stdio をスタディオと呼んでしまう。

135 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 01:01:51.34 ID:lTTMQ5z2.net]
>>113
ある程度のサイズのプログラムで大半を占めるアプリケーション層の操作が noexcept になる
なんてことは考えにくいので、 noexcept がデフォだったらそれはそれで許せない感じになる。
noexcept がデフォでうれしいのなんてライブラリ作者ぐらいでしょ。

136 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 01:37:48.41 ID:TTb4zObN.net]
>>130
regexもスタンダードなテンプレートライブラリだろ

137 名前:デフォルトの名無しさん [2016/12/01(木) 02:09:31.61 ID:SwKXepyG.net]
たとえ話。
STLを会社とすると、basic_stringはSTLの特別顧客だがSTLの社員ではない。
STLを会社とすると、regex、thread、iostreamは一般客。

regexを会社とすると、basic_stringはregexの特別顧客だが、regexの社員ではない。
stringstreamを会社とすると、basic_stringはstringstreamの契約社員。

basic_stringだけが特別な存在として異彩を放っている。

138 名前:デフォルトの名無しさん [2016/12/01(木) 02:52:13.09 ID:PTAZcCnS.net]
下手な例え話はやめろとあれほど言ったじゃないか

139 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 03:20:50.25 ID:n8BYNyNm.net]
>>128
確かに>>110の内容は誤解する余地のある書き方だけど普通に読めば理解できるし、>>115は良く読まずに脊髄反射してるか、分かってて揚げ足取りしてるのか、いずれにせよ建設的な議論ができないタイプなんだろう。

140 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 06:56:46.70 ID:SwKXepyG.net]
>>138
いらだつ気持ちはわかるよ。
basic_stringはヴェルタースオリジナルと同じくらい特別な存在だからね。
https://www.youtube.com/watch?v=4Yi9_uCw2NY



141 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 08:11:31.70 ID:7obV0jvg.net]
STLが会社ならstringはハケン
「ボク、正規になれるって頑張ってきたのに…」

142 名前:デフォルトの名無しさん [2016/12/01(木) 10:05:27.69 ID:PTAZcCnS.net]
>>139
ほう?
この例え話から建設的な議論を広げて貰おうか?

143 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 12:54:22.29 ID:rYSe/HxL.net]
>>142
そう言うレスが建設的じゃないって言われてるんだろ

144 名前:デフォルトの名無しさん [2016/12/01(木) 13:02:57.96 ID:PTAZcCnS.net]
>>143
え?なんで?
出来ないこと要求しちゃったから?

145 名前:デフォルトの名無しさん [2016/12/01(木) 14:01:09.15 ID:vPHgqg3S.net]
template<typename T> struct moge
{
struct hage{};
};
template<typename T> void hoge(typename moge<T>::hage)
{}
hoge(moge<int>::hage{});

hogeの呼び出しができません。hogeをどう変えればいいですか。

146 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 15:05:36.97 ID:SwKXepyG.net]
>>145
hoge<int>(moge<int>::hage());

147 名前:デフォルトの名無しさん [2016/12/01(木) 15:17:40.11 ID:vPHgqg3S.net]
呼び出しの方は変えたくないです
Tがどの型でも呼び出せるようにするにはどうすればいいですか

148 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 15:38:14.38 ID:O+yJrb2h.net]
俺はテンプレートなんか自分ではめったに書かないし
テンプレートの型推論のメカニズムも何も知らないが
要はhoge()の中でTが得られれば良いんでしょ?

template<typename T> struct moge
{
struct hage{ typedef T type; };
};
template<typename U> void hoge( U arg )
{
typedef U::type T;
}
hoge(moge<int>::hage{});

一応これでコンパイルは通る

149 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 15:39:23.16 ID:X/1wKSRH.net]
>>101
拾いきれない例外は外にふっとんでいく

150 名前:デフォルトの名無しさん [2016/12/01(木) 15:41:27.17 ID:SwKXepyG.net]
>>141
正社員より年収の良い派遣社員だよ、basic_stringさんは。
しかも、boost の文字列操作ライブラリの強力な支援を受けられる最強の八方美人。



151 名前:デフォルトの名無しさん [2016/12/01(木) 15:42:30.64 ID:vPHgqg3S.net]
それだとtypeを持った型ならなんでも受け付けてしまいます
mogeのhageしか受け付けないhogeが必要です

152 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 16:29:20.65 ID:aVqOQbdr.net]
コンパイラ無いから試せないけど、呼び出しに{}いるんだっけ?

153 名前:デフォルトの名無しさん [2016/12/01(木) 16:59:12.87 ID:umvXirxE.net]
clang: candidate template ignored: couldn't infer template argument 'T'

gcc: candidate: template<class T> void hoge(typename moge<T>::hage)
template argument deduction/substitution failed:
couldn't deduce template parameter 'T'

cl:
'hoge': no matching overloaded function found
'void hoge(moge<T>::hage)': could not deduce template argument for 'T'
see declaration of 'hoge'

みんな口を揃えて「Tが推定できない」と言ってくる
じゃあ、Tを明示的に与えては?
hoge<int>(moge<int>::hage{});
ちょっと腹立つけど、typenameだのtemplateだのの前置と
ウザさはそう変わらんと思う

154 名前:デフォルトの名無しさん [2016/12/01(木) 17:04:30.75 ID:umvXirxE.net]
ヘルパー関数を用意するとか
template <typename T>
void hige()
{
hoge<T>(moge<T>::hage{});
}

155 名前:デフォルトの名無しさん [2016/12/01(木) 17:06:57.95 ID:umvXirxE.net]
ラムダ式でも似たようなのできるな
auto closure = [](auto arg){ hoge<decltype(arg)>(moge<decltype(arg)>::hage{}); };
closure(1);

156 名前:デフォルトの名無しさん [2016/12/01(木) 17:12:07.19 ID:vPHgqg3S.net]
hoge(moge<int>::hage());
呼び出し方はこうでないといけないのです
hogeの定義の方をなんとかしてできませんか

157 名前:デフォルトの名無しさん [2016/12/01(木) 17:20:15.24 ID:EvfhiEON.net]
template<typename T> struct moge {
struct hage{ using type = T; };
};

template<typename T>
std::enable_if_t<std::is_same<T, typename moge<typename T::type>::hage>::value>
hoge(T) {};

158 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 18:08:07.28 ID:rYSe/HxL.net]
すでに終わった話を引っ張るのが建設的とはとても思えないんだが...
まあ、なんか悔しいんなら一人でやっててくれ w

159 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 18:49:53.87 ID:Xkx3qm7U.net]
>>157
hoge関数をどう変えるかと聞いてるのに
勝手にmogeの定義を変えるお題改変野郎

160 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 19:01:40.82 ID:aVqOQbdr.net]
>>156でなんか問題あるの?



161 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 19:13:39.34 ID:xNXWtXQs.net]
答えられないと「俺のお題改変に文句付けるのか」
「何が気に入らんのやワレ」と圧力

162 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 19:14:31.57 ID:O+yJrb2h.net]
>>159
現実問題としては、using type = T は無くても有ってもかまわないんだろうよ
実際のコードのhageの中身がどうなっているかわからないが
Tを使ったメンバがあるならdecltypeでTは取得できるし
Tを使ったメンバがないなら
おそらくはhageの処理をするのにTは要らない公算が高いだろ
hoge()が何をする関数かわからないから何とも言えないが
using type = T はサービスみたいなものじゃないかな

163 名前:デフォルトの名無しさん [2016/12/01(木) 19:15:49.51 ID:vPHgqg3S.net]
>>160
コンパイル通りません
153のようなエラーが出ます

164 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 20:31:23.58 ID:O3rxu16z.net]
>現実問題としては、using type = T は無くても有ってもかまわないんだろうよ

質問者以外の者がどうして根拠なしに決めつけようとするのか疑問だ
math.hにM_PIを入れただけで因縁をつけられてしまうというのに

165 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 21:42:58.03 ID:O+yJrb2h.net]
だから質問者に良いかどうか決めてもらえばよいだろって話
質問者が納得さえすればそれで終わりなんだからさ
それなのにこの質問者は>>157についてはノーコメントなんだよ

166 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 23:10:33.41 ID:O3rxu16z.net]
本気で質問しているようにも見えなかったが「できませんか」と訊かれているのだから
まず「出来ません」と回答しないと>>156は納得しないのではないだろうか。
可否がはっきりしない状態で質問通りでない代替案に誘導したらお題改変と罵られても致し方ない

167 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 23:22:29.15 ID:O+yJrb2h.net]
おまえなー、それなー
いいかげんにしろよな
お前、俺に>>164で何て言った?

168 名前:デフォルトの名無しさん [2016/12/01(木) 23:42:50.11 ID:SwKXepyG.net]
min(x,y)とmax(x,y)の定義がマクロ版とテンプレート版が混在して悶絶した経験のある人だけが石を投げなさい。

169 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 23:46:56.05 ID:rFASmZLg.net]
マクロ版min,maxは消せるけど

170 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 00:39:59.68 ID:pucVjZc7.net]
質問です。
ideone.com/R8pyc7
配列と要素数を受け取るクラスにvectorを渡したい時のスマートな方法を教えて下さい。



171 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 00:46:20.74 ID:xqmmn7KF.net]
vectorが変更しないならそれでいいだろうけど
そのコードみたいにpush_backするならhogeクラスには渡したくない
素直に考えるならvectorごと渡すクラスにすべきだが・・・

172 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 00:56:10.11 ID:vQsfzK7a.net]
>>156
>"hogeの定義の方"をなんとかしてできませんか
はできないからあきらめれよ!ってこと?

173 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:11:57.66 ID:EkOvBjK1.net]
>>170
ideone.com/bdR6fU

これでいいじゃん

constの参照だと参照を握ったままになるから常に反映される

174 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:17:41.14 ID:BG6OiKaZ.net]
既存のライブラリをそのまま使いたいのでクラスの変更はなしの方向でお願いします

ラムダ式でコピーコンストラクタを呼ぶ方法がいいのかな
ideone.com/R8pyc7

175 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:46:59.92 ID:bQI5jx4o.net]
この状況だとvectorを直接からめた時点でスマートじゃなくなるだろ
unique_ptrとか補助に使ってnew[]で確保した領域に値をコピーして渡すのが結局スマート(賢い)

176 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:50:25.88 ID:FOrSERG0.net]
vector用のオーバーロード作ればいいんじゃないのか

177 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 01:59:15.75 ID:EkOvBjK1.net]
>>174
size()を使ってる点でおかしいよ
vectorのインスタンスを無視するつもりか

178 名前:デフォルトの名無しさん [2016/12/02(金) 02:33:56.52 ID:kfHVwGjq.net]
>>177
君は間違っている。
STLでも begin() と end() で範囲指定するだろ。
イテレータがない型にも対応しようと思えば、先頭ポインタとサイズを渡すのが正しい。

179 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 02:49:25.45 ID:l8IxU+t8.net]
クラス変更無しでvector渡したいなら、ラッパを作って
配列と要素数を更新してからメソッド呼ぶようにするしかないんじゃないかな?

180 名前:デフォルトの名無しさん [2016/12/02(金) 05:46:11.27 ID:na0ypgqO.net]
何が問題でどうしたいのか明確にしてないからこんな風にとっちらかった回答になるんだよな



181 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 07:22:37.66 ID:nGP8T2R9.net]
質問者本人はこれ以上無いくらいに明確にしたつもり

182 名前:デフォルトの名無しさん [2016/12/02(金) 07:57:25.48 ID:na0ypgqO.net]
>>181
本人?
意図不明なラムダ使った未定義動作のコードで明確にしたつもりって言われてもなあ

183 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 08:20:31.67 ID:4/nN0nxx.net]
明確でないならスルーしとけばいい
明確でないから自分の都合で改編するとか迷惑なだけ

184 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 09:56:01.01 ID:tdlBqAAM.net]
>>174
連続格納が保証されてるのだから
&a[0]を渡せばいいよ

185 名前:デフォルトの名無しさん [2016/12/02(金) 10:09:51.51 ID:HWcr/nXn.net]
そもそもの基本
◎ int* に vector<int> は渡せない
相手が int* でビルトイン[]演算子を使う限り、
vector ではなく生の配列を用意する以外に選択肢はない

186 名前:デフォルトの名無しさん [2016/12/02(金) 10:30:03.38 ID:na0ypgqO.net]
明確にしたとしても
>>185
みたいに何も解ってない初心者がでしゃばって見当違いな回答する事も多かったな

187 名前:デフォルトの名無しさん [2016/12/02(金) 10:53:45.98 ID:HWcr/nXn.net]
そもそもの基本を指摘されて発狂するようなガイキチが暴れてただけだろ

188 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 10:59:49.79 ID:dQ26sSxp.net]
>>170
ラッパーかヘルパーを用意して、vectorはそっちで処理する。

189 名前:デフォルトの名無しさん [2016/12/02(金) 11:04:51.34 ID:na0ypgqO.net]
>>187
お前は何のためにstd::vector<T>::dataがT*を返すと思ってんの?

190 名前:デフォルトの名無しさん [2016/12/02(金) 12:06:38.84 ID:kfHVwGjq.net]
vector::data()が追加されたのはC++11 からだから古い入門書には載ってない。
だから安易にdata()を使えと回答する人もまた入門者に近しい。



191 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:12:12.15 ID:jbEu1BDa.net]
どうも論理が飛躍しているな

192 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:28:12.29 ID:7EcjjmS3.net]
質問者はラムダ使ってるんだからdata()使えるでしょ

193 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:29:35.07 ID:dQ26sSxp.net]
>>190
古い入門書を想定しろ、はさすがに言いがかりがひどすぎる。

194 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:36:41.22 ID:oWLJBZXg.net]
AnsiString::data()のパクリか…

195 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:38:30.29 ID:oWLJBZXg.net]
いや、string::data()か

196 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 14:14:03.78 ID:uzv70fAD.net]
data()はいいけど、vectorにemplace_back()したらsize()も変化するんだが
それが渡したクラスでは反映されないってのが問題だと思ってたんだが勘違い?

197 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 14:59:13.58 ID:7EcjjmS3.net]
俺もそう思ってた
もっといえば要素増やすとdata()の場所がかわってアクセス違反になるかもしれなくて困ると言うことかと

198 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 15:03:09.14 ID:uzv70fAD.net]
>>197
あーそれはあるね
どんどん要素を増やして行くと再newしてそこに全部要素コピーされなおして
元のアドレスは無効になるってのがあったな
だからvectorをメンバに持つのを頑なに拒否する理由がわからない

199 名前:デフォルトの名無しさん [2016/12/02(金) 15:13:55.45 ID:kfHVwGjq.net]
なんだか急にスレのレベルが落ちたのはなぜ?
他の場所で使うためのvectorをメンバ変数にするとか勝手なこと言いだしているし、精神病っぽいんだが。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<56KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef