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); } };
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をメンバ変数にするとか勝手なこと言いだしているし、精神病っぽいんだが。