次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part129
http://echo.2ch.net/test/read.cgi/tech/1483940967/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/
■長いソースを貼るときはここへ。■
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
探検
C++相談室 part130 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ f37a-QmV0)
2017/03/31(金) 08:47:49.65ID:UkLjKqcm0123デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/11(火) 15:06:41.62ID:xAQ0kPvC0 パスいるやん
124デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/11(火) 17:53:37.33ID:gmpvjUS3r まじか
じゃあ同じ内容のN4659で
じゃあ同じ内容のN4659で
126デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/12(水) 22:52:37.49ID:hzellBg9r127デフォルトの名無しさん (ワッチョイ db57-EaKP)
2017/04/13(木) 12:41:59.49ID:NIQ3hjXd0 んだね
128デフォルトの名無しさん (ワッチョイ eb00-AM0K)
2017/04/13(木) 17:14:46.56ID:IqLxmvNO0 moduleが標準入りするのはいつごろよ?ついでにD言語のversionとaliasもパクって完全体になってほしいね
129デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
2017/04/13(木) 18:41:48.04ID:RdwWAERL0 それよりネットワーク関連を標準化しろ
この際asioでも許容
この際asioでも許容
130デフォルトの名無しさん (ワッチョイ 3b32-Lcy7)
2017/04/13(木) 21:28:48.50ID:n9EAyVre0 asioとhttp系の何かつけてくれ
131デフォルトの名無しさん (ワッチョイ eb86-HE/W)
2017/04/15(土) 11:47:11.44ID:BNJEkz/Q0132デフォルトの名無しさん (ササクッテロル Sp6f-cQmk)
2017/04/15(土) 11:52:21.06ID:0ry10bQQp 標準で入ってることが重要なんじゃないかなあ…
133デフォルトの名無しさん (ワッチョイ 1f6b-HE/W)
2017/04/15(土) 11:56:11.76ID:JwQS3cI30 炊飯器用の小さいネットワークライブラリも必要になるんじゃねえの
134デフォルトの名無しさん (ワッチョイ 0f1f-V7Gz)
2017/04/15(土) 12:21:35.22ID:QXvRHshA0 漁師さん用も頼む
135デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
2017/04/15(土) 14:16:17.69ID:/RNhb41k0 外部ライブラリっていうだけでハードル高くなるからな
仕事で使いづらいのはもちろんとしてOSSでも使用者に各ライブラリを掻き集めてもらわないといけなくなるから最小限にしたい
仕事で使いづらいのはもちろんとしてOSSでも使用者に各ライブラリを掻き集めてもらわないといけなくなるから最小限にしたい
136デフォルトの名無しさん (ワッチョイ 1fb2-EaKP)
2017/04/15(土) 21:37:48.57ID:53BEnEdf0 論理積で空集合になったからといって
じゃあ論理和にしろと? 頭悪すぎだろ
じゃあ論理和にしろと? 頭悪すぎだろ
137デフォルトの名無しさん (ワッチョイ eb59-0/8P)
2017/04/15(土) 22:25:04.54ID:D67U9VSC0 静的型付け言語でオブジェクト指向すると
基底クラスにメソッドが集まっていく…
基底クラスにメソッドが集まっていく…
138デフォルトの名無しさん (ワッチョイ efa6-HE/W)
2017/04/15(土) 22:33:53.11ID:uwyLFIA10 それはよくない兆候だよね
139デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
2017/04/15(土) 23:01:12.27ID:/RNhb41k0 何故テンプレートを使わないのか
140デフォルトの名無しさん (ワッチョイ eb59-0/8P)
2017/04/16(日) 01:51:56.03ID:M1nx5OGg0 基底クラスにメソッドが集まっていくのは仕方が無いにしても、
公開する相手別にインターフェースを分けて抽象クラスの多重継承でもしておけば
大きな混乱は避けられる
希ガス
公開する相手別にインターフェースを分けて抽象クラスの多重継承でもしておけば
大きな混乱は避けられる
希ガス
141デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
2017/04/16(日) 03:21:47.75ID:9vBuyRLK0 仕方ないか?
そういう場合大抵は派生先のあのクラスとあのクラスでこれ使うから基底にいれとこうみたいになってis aじゃなくなってる気がする
そういう場合大抵は派生先のあのクラスとあのクラスでこれ使うから基底にいれとこうみたいになってis aじゃなくなってる気がする
142デフォルトの名無しさん (ワッチョイ 3b0d-T+tu)
2017/04/16(日) 10:05:38.55ID:P5/zt8YK0 俺も>>141に一票かな。
基底クラスに集まって来るような関数群は、共通に使うという一点に於いてのみ意味があることが多いんだよね。
と、すると、大抵別クラスとして分離可能になるってケースが多い気が。
つまり、実はhas-aが妥当で、それどころかUMLで言うところの依存関係だけで問題ない事が多いという。
基底クラスに集まって来るような関数群は、共通に使うという一点に於いてのみ意味があることが多いんだよね。
と、すると、大抵別クラスとして分離可能になるってケースが多い気が。
つまり、実はhas-aが妥当で、それどころかUMLで言うところの依存関係だけで問題ない事が多いという。
143デフォルトの名無しさん (ワッチョイ bbf4-aC3X)
2017/04/16(日) 13:02:22.02ID:FhXvPItE0 dynamic_castは悪という間違った考え方が基底に余計なメンバ関数を実装させる原因
144デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
2017/04/16(日) 13:15:07.28ID:cLuVKvb50 dynamic_castが悪いのではなくdynamic_cast使いまくるようなら設計に問題があるのではないかという話なのでは
145デフォルトの名無しさん (ワッチョイ 4b3c-yJ/5)
2017/04/16(日) 14:09:06.37ID:1LAAxzhm0 おっと、Javaを悪く言うのはそこまでだ
146デフォルトの名無しさん (オッペケ Sr6f-xkGs)
2017/04/16(日) 14:12:39.55ID:kL6yOSUfr 144がアスペなのは間違い無い
147デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
2017/04/16(日) 14:49:30.10ID:9vBuyRLK0 144を理解出来ない146が…
148デフォルトの名無しさん (ワッチョイ eb59-0/8P)
2017/04/16(日) 14:53:55.66ID:M1nx5OGg0 知らね
ゼロから設計するならともかく、すでに出来上がった構造に仕様追加がなされた場合、
基底クラスにメソッドを追加する流れになりがち
かつdynamic_castはある意味オブジェクト指向的解決手段と言えるかもしれないが、
静的型付けという枠組み(>137)から逸脱する
ゼロから設計するならともかく、すでに出来上がった構造に仕様追加がなされた場合、
基底クラスにメソッドを追加する流れになりがち
かつdynamic_castはある意味オブジェクト指向的解決手段と言えるかもしれないが、
静的型付けという枠組み(>137)から逸脱する
149デフォルトの名無しさん (ワッチョイ 1fcc-35Q+)
2017/04/16(日) 15:31:42.38ID:Jwa8aGsr0 dynamic_cast と reinterpret_cast が本来の意味と逆だよな
150デフォルトの名無しさん (ワッチョイ bbf4-aC3X)
2017/04/16(日) 22:20:05.54ID:FhXvPItE0 複数インターフェース継承してdynamic_castすればいいところを、基底で取り敢えず全インターフェース重ねてなにもしない実装を定義するみたいなことが多すぎる。
151デフォルトの名無しさん (オッペケ Sr6f-xkGs)
2017/04/16(日) 22:47:27.74ID:kL6yOSUfr >dynamic_cast と reinterpret_cast が本来の意味と逆だよな
訳:ボクは言語障害です
訳:ボクは言語障害です
152デフォルトの名無しさん (ワッチョイ 9f78-T+tu)
2017/04/17(月) 02:47:11.79ID:/ZxvtgP60 >>150
いや、それもなんかおかしいだろ。
いや、それもなんかおかしいだろ。
153デフォルトの名無しさん (ワッチョイ 6b3c-cQmk)
2017/04/17(月) 03:21:23.30ID:GWeDXk7n0 抽象から具体へのキャストって何かもやもやする
SOLID原則のDIPに反するんじゃないかって気もするし
SOLID原則のDIPに反するんじゃないかって気もするし
154デフォルトの名無しさん (ワッチョイ eb92-D+C1)
2017/04/17(月) 07:06:11.59ID:D/VW2xRY0 昔風の継承モデルは最近使わなくなったなあ
テンプレートの方が融通性高い
テンプレートの方が融通性高い
155デフォルトの名無しさん (ワッチョイ 1fcc-35Q+)
2017/04/17(月) 07:43:02.51ID:H8Au7WAd0 は?バカじゃねぇの
156デフォルトの名無しさん (ワッチョイ 9fc3-hp0W)
2017/04/17(月) 07:48:02.60ID:4nIA4vL50 はい
157デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
2017/04/17(月) 08:36:25.34ID:R62eo4r30 dynamic_castするよりはそいつが該当するinterfaceを持ってるか確認するほうがマシだと思う
struct scroll_interface{
virtual bool down(float value)=0;
virtual bool up(float value)=0;
};
struct view{
virtual scroll_interface* scrollable(){return 0;}
};
struct list_view : view{
virtual scroll_interface* scrollable(){return ptr;}
};
if(auto sc = view->scrollable()){
sc->down(1);
}
みたいな感じ
struct scroll_interface{
virtual bool down(float value)=0;
virtual bool up(float value)=0;
};
struct view{
virtual scroll_interface* scrollable(){return 0;}
};
struct list_view : view{
virtual scroll_interface* scrollable(){return ptr;}
};
if(auto sc = view->scrollable()){
sc->down(1);
}
みたいな感じ
158デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
2017/04/17(月) 08:50:40.08ID:bqYXNS3A0 非メンバ関数にできるものはvariant使った方がいいなって感じになってきた
159デフォルトの名無しさん (スップ Sd3f-a7Ro)
2017/04/17(月) 08:54:59.22ID:OwDSFehNd >>157
なんかやだ
なんかやだ
160デフォルトの名無しさん (ワッチョイ 3b37-T+tu)
2017/04/17(月) 08:55:54.12ID:5RBrgFiu0161デフォルトの名無しさん (スプッッ Sd3f-lyFy)
2017/04/17(月) 09:07:38.99ID:qMcNcEsbd RTTIはオプションで切っておきたい
162デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
2017/04/17(月) 09:13:50.45ID:R62eo4r30 >>160
継承関係になくていいというところが違うし(結構大事だと思う)、dynamic_castはダイナミックリンクするライブラリと組み合わせると面倒くさいからなるべく使いたくないんだよね。
継承関係になくていいというところが違うし(結構大事だと思う)、dynamic_castはダイナミックリンクするライブラリと組み合わせると面倒くさいからなるべく使いたくないんだよね。
163デフォルトの名無しさん (スップ Sd3f-a7Ro)
2017/04/17(月) 10:32:14.53ID:OwDSFehNd 依存関係の強さは変わらんよね
164デフォルトの名無しさん (ワッチョイ 1f6b-HE/W)
2017/04/17(月) 12:22:18.70ID:PEkyQsSL0 その「強さ」を具体的に数値化できればな
165デフォルトの名無しさん (ワッチョイ 2bf4-EaKP)
2017/04/17(月) 14:44:09.70ID:YxhJnxLO0 >>157
スクロールできないクラスの中にscroll_interface*を返す関数があってnullptrを返すのか
その論法では絶対にあり得ない機能への問い合わせ関数を膨大な数抱え込むここになるぞ
スクロールできないクラスの中にscroll_interface*を返す関数があってnullptrを返すのか
その論法では絶対にあり得ない機能への問い合わせ関数を膨大な数抱え込むここになるぞ
166デフォルトの名無しさん (ワッチョイ 2bf4-EaKP)
2017/04/17(月) 14:46:29.60ID:YxhJnxLO0167デフォルトの名無しさん (スップ Sd3f-a7Ro)
2017/04/17(月) 16:34:39.13ID:OwDSFehNd QueryInterfaceいやだ
168デフォルトの名無しさん (ワッチョイ eb00-AM0K)
2017/04/17(月) 16:58:00.17ID:rD3LHvJv0 COM設計したやつって基地外だよな
169デフォルトの名無しさん (ワッチョイ 2bf4-EaKP)
2017/04/17(月) 18:04:25.63ID:YxhJnxLO0 APIが単一空間に際限なく増えることへの危機感から
何らか対策を講じるとして、割とまともな答えだと思う
何らか対策を講じるとして、割とまともな答えだと思う
170デフォルトの名無しさん (ワッチョイ 2bf4-EaKP)
2017/04/17(月) 18:05:14.09ID:YxhJnxLO0 GUIDの扱い方が変態的なのがちょっとイヤだけどね
171デフォルトの名無しさん (ワッチョイ eb59-0/8P)
2017/04/17(月) 22:27:32.59ID:ZfEceRxS0 やっぱこれからはAPIが呼び出し元のコードを生成すべき
172デフォルトの名無しさん (ブーイモ MMaf-YOru)
2017/04/17(月) 22:40:09.29ID:KscfyyhaM 呼び出し元のコードは誰が呼び出すんだ
173片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd3f-L+dC)
2017/04/17(月) 22:43:06.49ID:dVaQYL/0d オバマ元大統領が電話で呼び出してくれるだろう。
174デフォルトの名無しさん (ワッチョイ 6b3c-cQmk)
2017/04/18(火) 00:19:12.10ID:3dyURfCV0 そうなんだ、すごいね
175デフォルトの名無しさん (ワッチョイ 1fcc-35Q+)
2017/04/18(火) 04:24:36.93ID:sGHQhIiJ0 _人人人人人人人人人人人人人人人_
> そうなんだ、すごいね! <
´ ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
__、、=--、、 __
/ ・ ゙! /・ `ヽ
| ・ __,ノ (_ ・ |
ヽ、 (三,、, _) /
/ー-=-i'' (____,,,.ノ
|__,,/ |__ゝ
〉 ) ( )
> そうなんだ、すごいね! <
´ ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
__、、=--、、 __
/ ・ ゙! /・ `ヽ
| ・ __,ノ (_ ・ |
ヽ、 (三,、, _) /
/ー-=-i'' (____,,,.ノ
|__,,/ |__ゝ
〉 ) ( )
176デフォルトの名無しさん (ワッチョイ db65-EaKP)
2017/04/18(火) 14:33:19.90ID:opmIphTi0 >>171
APIが関数ではなくテンプレートであるべきということか?
APIが関数ではなくテンプレートであるべきということか?
177ich1 (アウアウオー Sabf-d3ae)
2017/04/18(火) 14:56:55.08ID:ZJShoz7Oa https://goo.gl/Y4tSAe
これは嘘でしょ?本当?
これは嘘でしょ?本当?
178デフォルトの名無しさん (ワッチョイ db65-EaKP)
2017/04/18(火) 15:43:43.41ID:opmIphTi0 >>177
スレ違い「生理前の肌荒れナントカ」
スレ違い「生理前の肌荒れナントカ」
179デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 00:24:26.42ID:37YtuUfA0 テンプレートに演算子を与えたいのだけど、マクロでやらないとダメよね?
maxとかminとか。
走査するところは共通で、> か < かが違うだけなのだけど。
maxとかminとか。
走査するところは共通で、> か < かが違うだけなのだけど。
180デフォルトの名無しさん (ササクッテロレ Sp6f-cQmk)
2017/04/19(水) 00:50:34.43ID:5KqdfKh3p 比較用のファンクタをテンプレートパラメータにすれば良いだけじゃないの
STLのmapみたいな感じで
STLのmapみたいな感じで
181デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 01:36:15.55ID:37YtuUfA0182デフォルトの名無しさん (ワッチョイ efa6-HE/W)
2017/04/19(水) 06:48:25.24ID:1gRwKhTB0 よく話が通じるな
183デフォルトの名無しさん (ワッチョイ 1fcc-35Q+)
2017/04/19(水) 07:02:34.69ID:pPK7kNhi0 トーシローの考えることなど手に取るように解るだろ
184デフォルトの名無しさん (ワッチョイ 9fc3-hp0W)
2017/04/19(水) 07:45:25.15ID:CHQbSNlI0 ファンクタってなに?
185デフォルトの名無しさん (ワッチョイ 2b51-EaKP)
2017/04/19(水) 07:58:24.39ID:NVOSG7Tn0 メンバoperator()を持つクラスのインスタンス
186デフォルトの名無しさん (オッペケ Sr6f-xkGs)
2017/04/19(水) 08:01:07.84ID:2ep/ROmVr というのが185の妄想
187デフォルトの名無しさん (ドコグロ MMbf-RLAq)
2017/04/19(水) 08:10:11.76ID:CJSzniGcM >>181
なぜ試さない?
なぜ試さない?
188デフォルトの名無しさん (ワッチョイ 2b51-EaKP)
2017/04/19(水) 08:29:27.36ID:NVOSG7Tn0 という妄想を朝から垂れ流す186
189デフォルトの名無しさん (ワッチョイ 0b6a-T+tu)
2017/04/19(水) 09:06:44.93ID:oJjBFOoS0 >>181
templateとファンクタはインライン展開がかなり期待できる手法。
templateとファンクタはインライン展開がかなり期待できる手法。
190デフォルトの名無しさん (ワッチョイ 1f72-8aNn)
2017/04/19(水) 10:21:17.52ID:TnomPWtQ0 #include "A.h"
と
class A;
の違いって何でしょうか?
どのように使い分けるのですか?
と
class A;
の違いって何でしょうか?
どのように使い分けるのですか?
191デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 10:26:39.57ID:37YtuUfA0 >>187,189
確かに以前違うところで思いっきりインラインされているのを見たから、
実際にはされるのだろうね。
ただ、C++のそういった方向への進化はちょっと嫌いだね。
今現在マクロで書いてるからテンプレートが改行無しのコードになってる。
使い勝手は悪いけど、確実に動くし、インラインだ。
俺の要求としては「テンプレートに演算子を書かせてくれ」これだけだ。
さてC++は何故かこれができない。
とは言え珍しいケースでもないはずだから、実際にはやり方があるはず。
そして聞いてみると、型を作る為にファンクタを作って差し込めばいいと言う。
わざわざ型を作ってコンパイラがインライン化するのを期待しろ?
そりゃ動作だけなら同じだが、ソースが余計に見にくくなる。
今の改行無しのコードと、どっちがマシかと言えば、min/max位なら前者だよ。
だからこれなら今回は見送りだ。
とは言え、巨大なテンプレートになってブレークポインタがないと辛い状況になると、
これまではコピペしてデバッグして上書き、というのをやってた。
これは無駄だなあと思っていたので、
とにかくやり方があるのを教えてもらったのはありがたい。
ただ、この解を一般的に受け付けるC++のコミュニティのノリは俺はちょっと嫌い。
重ねて言うが、普通に演算子書かせてくれよ、と思う。
確かに以前違うところで思いっきりインラインされているのを見たから、
実際にはされるのだろうね。
ただ、C++のそういった方向への進化はちょっと嫌いだね。
今現在マクロで書いてるからテンプレートが改行無しのコードになってる。
使い勝手は悪いけど、確実に動くし、インラインだ。
俺の要求としては「テンプレートに演算子を書かせてくれ」これだけだ。
さてC++は何故かこれができない。
とは言え珍しいケースでもないはずだから、実際にはやり方があるはず。
そして聞いてみると、型を作る為にファンクタを作って差し込めばいいと言う。
わざわざ型を作ってコンパイラがインライン化するのを期待しろ?
そりゃ動作だけなら同じだが、ソースが余計に見にくくなる。
今の改行無しのコードと、どっちがマシかと言えば、min/max位なら前者だよ。
だからこれなら今回は見送りだ。
とは言え、巨大なテンプレートになってブレークポインタがないと辛い状況になると、
これまではコピペしてデバッグして上書き、というのをやってた。
これは無駄だなあと思っていたので、
とにかくやり方があるのを教えてもらったのはありがたい。
ただ、この解を一般的に受け付けるC++のコミュニティのノリは俺はちょっと嫌い。
重ねて言うが、普通に演算子書かせてくれよ、と思う。
192デフォルトの名無しさん (スプッッ Sd3f-lyFy)
2017/04/19(水) 10:30:32.85ID:cmg5eKJnd マクロなんてアホみたいな機能使ってる奴がいまだにいたとは
193デフォルトの名無しさん (スップ Sd3f-a7Ro)
2017/04/19(水) 10:38:16.72ID:xWugx3VWd ああ、std::plus とかラムダ式じゃなくて + を指定したいって意味か
194デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 11:18:27.22ID:37YtuUfA0 おー、そういうのがあるんだね。
なるほどそれなら std::rel_ops::operator> を使うべきなのかな?
これが標準なら慣れるしかないけど、何だかなー。
呼び出し時に somefunc<double,std::rel_ops::operator>>
だとminなのかmaxなのか分からない。
今は関数名もsome_max, some_minとかに出来てるんだよね。
なるほどそれなら std::rel_ops::operator> を使うべきなのかな?
これが標準なら慣れるしかないけど、何だかなー。
呼び出し時に somefunc<double,std::rel_ops::operator>>
だとminなのかmaxなのか分からない。
今は関数名もsome_max, some_minとかに出来てるんだよね。
195デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 11:29:39.03ID:37YtuUfA0 ちなみに現状はこんなコード
#define FUNC(fname,op) \
template<class T> static T fname(T* ptr, int num){\
T max = *ptr;\
int idx = 1;\
while (idx<num) {\
if (max op ptr[idx]) max = ptr[idx];\
idx++;\
}\
return max;\
}
FUNC(max,<)
FUNC(min,>)
#undef FUNC
#define FUNC(fname,op) \
template<class T> static T fname(T* ptr, int num){\
T max = *ptr;\
int idx = 1;\
while (idx<num) {\
if (max op ptr[idx]) max = ptr[idx];\
idx++;\
}\
return max;\
}
FUNC(max,<)
FUNC(min,>)
#undef FUNC
196デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
2017/04/19(水) 12:34:12.22ID:q88wQIwA0 std::max_element
お前どこかのスレでbindが遅いとか、質問に答えた相手をアホ呼ばわりしたやつじゃね?
お前どこかのスレでbindが遅いとか、質問に答えた相手をアホ呼ばわりしたやつじゃね?
197デフォルトの名無しさん (ドコグロ MMbf-RLAq)
2017/04/19(水) 12:41:12.49ID:CJSzniGcM198デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 12:46:19.25ID:37YtuUfA0199デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 12:50:36.22ID:37YtuUfA0 ちなみにマクロは糞だと思うぞ。
単純置換くらいならいいが、それ以上は訳が分からなくなる。
ただ、演算子を置換したい為にファンクタにしてテンプレートに突っ込むのも同様に糞だと思うぞ。
見て分かりやすいものではないだろ。
単純置換くらいならいいが、それ以上は訳が分からなくなる。
ただ、演算子を置換したい為にファンクタにしてテンプレートに突っ込むのも同様に糞だと思うぞ。
見て分かりやすいものではないだろ。
200デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
2017/04/19(水) 13:00:01.75ID:q88wQIwA0201デフォルトの名無しさん (ワッチョイ ef14-AM0K)
2017/04/19(水) 13:04:45.97ID:Z8YDH0nj0 struct Maxf{
template <typename T>static const T f(const T& a, const T& b){return a>b?a:b;}
};
struct Minf{
template <typename T>static const T f(const T& a, const T& b){return a<b?a:b;}
};
template<class M,typename T >struct Func
{
static const T f(const T* p, int n)
{
T m = p[0];
for(int i = 1 ; i < n ; i++){ m = M::f(m,p[i]);}
return m;
}
};
double a[]={-2,3.14,2.2369,0.};
double maxv = Func<Maxf>::f(a, sizeof(a)/sizeof(a[0]) );
書いといてなんだが、見やすい見にくいの問題なら個人の感想なので好きなようにどうぞとしか
template <typename T>static const T f(const T& a, const T& b){return a>b?a:b;}
};
struct Minf{
template <typename T>static const T f(const T& a, const T& b){return a<b?a:b;}
};
template<class M,typename T >struct Func
{
static const T f(const T* p, int n)
{
T m = p[0];
for(int i = 1 ; i < n ; i++){ m = M::f(m,p[i]);}
return m;
}
};
double a[]={-2,3.14,2.2369,0.};
double maxv = Func<Maxf>::f(a, sizeof(a)/sizeof(a[0]) );
書いといてなんだが、見やすい見にくいの問題なら個人の感想なので好きなようにどうぞとしか
202デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 13:19:37.56ID:37YtuUfA0 >>201
ああなるほど、サンクス。そうすれば外側に名前が見えるのね。
個人的にはちょっと技巧的すぎて嫌いなコードだが、
正直なところ、コピペしてデバッグしてコピペで戻すのもうんざりしてたので、
徐々に慣らしながら使わせてもらうことにするよ。
C++での割と標準的な解決法ってこれなんだよね?
みんながやってるのなら俺も慣れるしかない。
ああなるほど、サンクス。そうすれば外側に名前が見えるのね。
個人的にはちょっと技巧的すぎて嫌いなコードだが、
正直なところ、コピペしてデバッグしてコピペで戻すのもうんざりしてたので、
徐々に慣らしながら使わせてもらうことにするよ。
C++での割と標準的な解決法ってこれなんだよね?
みんながやってるのなら俺も慣れるしかない。
203デフォルトの名無しさん (ワッチョイ 0b75-93S+)
2017/04/19(水) 13:32:04.24ID:q88wQIwA0 >>202
>>201 はまったく標準的ではない。
そんな書き方させる標準ライブラリが一つでもあるか?
http://ideone.com/DLaG5f
これだけの話(わざとmin_elementは使わずに書いてる)
std::max_elementと関数名は勝手に置き換えろ
>>201 はまったく標準的ではない。
そんな書き方させる標準ライブラリが一つでもあるか?
http://ideone.com/DLaG5f
これだけの話(わざとmin_elementは使わずに書いてる)
std::max_elementと関数名は勝手に置き換えろ
204デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 14:06:14.80ID:37YtuUfA0 >>203
いやだからイテレータが欲しいんじゃないんだよ。
それって話が余計に膨らんじゃうだろ。
今既に走査するコードはあって、それをテンプレートで置き換えようとしている。
呼んだら結果が返ってくる、それだけの関数なんだよ。
そのマクロを撲滅しようとしている。
イテレータだと外側コンテナに色々付け足しが必要になる。
それをやりたい訳じゃない。
最初から全て標準コンテナを使え、というのならその通りだが、それは別件だ。
今は生配列なんだよ。
とりあえず「型」としてファンクタなり構造体をテンプレートに渡し、
中でそれを使う、というのが一般的で良いんだよな?
それとは別に、走査する部分はイテレータで統一し、
std::max_element等にそれを呼ばせるというのも一つのやり方だよ。
ただこれは今やりたい話じゃない。
つか、イテレータイテレータ言ってるのはJavaだと思っていたが、
C++もイテレータ全盛の世界なのか?
いやだからイテレータが欲しいんじゃないんだよ。
それって話が余計に膨らんじゃうだろ。
今既に走査するコードはあって、それをテンプレートで置き換えようとしている。
呼んだら結果が返ってくる、それだけの関数なんだよ。
そのマクロを撲滅しようとしている。
イテレータだと外側コンテナに色々付け足しが必要になる。
それをやりたい訳じゃない。
最初から全て標準コンテナを使え、というのならその通りだが、それは別件だ。
今は生配列なんだよ。
とりあえず「型」としてファンクタなり構造体をテンプレートに渡し、
中でそれを使う、というのが一般的で良いんだよな?
それとは別に、走査する部分はイテレータで統一し、
std::max_element等にそれを呼ばせるというのも一つのやり方だよ。
ただこれは今やりたい話じゃない。
つか、イテレータイテレータ言ってるのはJavaだと思っていたが、
C++もイテレータ全盛の世界なのか?
205デフォルトの名無しさん (ワッチョイ 0b75-93S+)
2017/04/19(水) 14:19:56.81ID:q88wQIwA0 >>204
int a[8]={4,-2,4,56,7,8,5,3};
が生配列に見えないの?
const T* a,size_t s
が生ポインタと要素数って解らなかった?
C++どころかC言語すら解ってないんじゃないの?
お前の頭には応用という言葉が無いの?
http://ideone.com/i2h96y
int a[8]={4,-2,4,56,7,8,5,3};
が生配列に見えないの?
const T* a,size_t s
が生ポインタと要素数って解らなかった?
C++どころかC言語すら解ってないんじゃないの?
お前の頭には応用という言葉が無いの?
http://ideone.com/i2h96y
206デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
2017/04/19(水) 14:25:44.80ID:15mBJgd3M イテレータってお前の言ってる走査のシンタックスシュガーやぞ
207デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 14:36:42.93ID:37YtuUfA0208デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 16:00:45.80ID:37YtuUfA0 すまんが次の質問。
テンプレート内部で型を決めうちしたいのだが、この書き方ってある?
例えば内部で高精度で演算したい時、引数型が
引数double -> 内部double
引数float -> 内部double
引数short -> 内部int64
とか。引数型に対して内部型は確定的に決まる。
今は
template<typename T, typename Ti> double somefunc(T* src0, T* src1, int t){}
で引数型 T、内部型 Ti としてる。
ただ、これだといちいち呼び出し時に書かないといけない。
単発なのは我慢していたのだけど、リファクタを進めていくと、
上位関数が template<typename T> で済んでいるのに、内部関数が Ti を必要とするから
上位関数も template<typename T, typename Ti> となりだしてちょっとウザくなってきてる。
Ti を何とかして潰せれば呼び出し時にも書かなくて良くなり、全てすっきりするのだが。
テンプレート内部で型を決めうちしたいのだが、この書き方ってある?
例えば内部で高精度で演算したい時、引数型が
引数double -> 内部double
引数float -> 内部double
引数short -> 内部int64
とか。引数型に対して内部型は確定的に決まる。
今は
template<typename T, typename Ti> double somefunc(T* src0, T* src1, int t){}
で引数型 T、内部型 Ti としてる。
ただ、これだといちいち呼び出し時に書かないといけない。
単発なのは我慢していたのだけど、リファクタを進めていくと、
上位関数が template<typename T> で済んでいるのに、内部関数が Ti を必要とするから
上位関数も template<typename T, typename Ti> となりだしてちょっとウザくなってきてる。
Ti を何とかして潰せれば呼び出し時にも書かなくて良くなり、全てすっきりするのだが。
209デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 16:07:17.99ID:37YtuUfA0 すまん、ググったら条件分岐がヒットした。
というか2段重ねれば良いだけか?という気がしてきた。
あまり自信はないが。
というか2段重ねれば良いだけか?という気がしてきた。
あまり自信はないが。
210デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
2017/04/19(水) 16:15:43.91ID:15mBJgd3M type_traits使う
211デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 16:30:01.80ID:37YtuUfA0 >>210
> type_traits
見た目それようだが、何故かサイズが取れないのね。
ただどのみち俺の環境(VS2008)では使えないようだ。
とはいえ、今回の質問はどうやらラップすれば終わりのようだ。
お騒がせして申し訳ない。
> type_traits
見た目それようだが、何故かサイズが取れないのね。
ただどのみち俺の環境(VS2008)では使えないようだ。
とはいえ、今回の質問はどうやらラップすれば終わりのようだ。
お騒がせして申し訳ない。
212デフォルトの名無しさん (ワッチョイ 0b75-93S+)
2017/04/19(水) 16:39:33.18ID:q88wQIwA0 >>209
色々方法あるけど
*1 単純にオーバーロードを重ねる
template<typename T, typename Ti> double somefunc_impl(T* src0, T* src1, int t){}
double somefunc(float* src0, float* src1, int t){
return somefunc_impl<float,double>(src0,src1,t);
}
double somefunc(short* src0, short* src1, int t){
return somefunc_impl<short,int64 >(src0,src1,t);
}
double somefunc(double* src0, double* src1, int t){
return somefunc_impl<double,double>(src0,src1,t);
}
*2 trait (somefunc_internal_typeを定義していない型だけ渡すとコンパイルエラー)
template<typename T>struct somefunc_internal_type{};
template<>struct somefunc_internal_type<float>{ using type = double; };
template<>struct somefunc_internal_type<double>{ using type = double; };
template<>struct somefunc_internal_type<short>{ using type = int64_t; };
template<typename T, typename Ti = somefunc_internal_type<T>::type> double somefunc(T* src0, T* src1, int t){}
規則性があるならtraitsはenable_ifとかで少なく書けるが、深入りするとC++の闇にのまれるからおすすめしない
using type = double; を typedef double type; に変えたらたぶんVS2008でも使える
色々方法あるけど
*1 単純にオーバーロードを重ねる
template<typename T, typename Ti> double somefunc_impl(T* src0, T* src1, int t){}
double somefunc(float* src0, float* src1, int t){
return somefunc_impl<float,double>(src0,src1,t);
}
double somefunc(short* src0, short* src1, int t){
return somefunc_impl<short,int64 >(src0,src1,t);
}
double somefunc(double* src0, double* src1, int t){
return somefunc_impl<double,double>(src0,src1,t);
}
*2 trait (somefunc_internal_typeを定義していない型だけ渡すとコンパイルエラー)
template<typename T>struct somefunc_internal_type{};
template<>struct somefunc_internal_type<float>{ using type = double; };
template<>struct somefunc_internal_type<double>{ using type = double; };
template<>struct somefunc_internal_type<short>{ using type = int64_t; };
template<typename T, typename Ti = somefunc_internal_type<T>::type> double somefunc(T* src0, T* src1, int t){}
規則性があるならtraitsはenable_ifとかで少なく書けるが、深入りするとC++の闇にのまれるからおすすめしない
using type = double; を typedef double type; に変えたらたぶんVS2008でも使える
213デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 16:54:59.37ID:37YtuUfA0 >>212
ありがとう。まさに今その1をやったところ。
地味だがこれが一番分かりやすい。
ラップしまくるのは気になるが、C++の世界だとコンパイラが最適化してくれることを期待するんだよな?
traitは後日試してみるわ。本来はそっちの方が本筋なのだろうし。
今回は精度最高型で演算するだけだから規則は簡単。
char, short, int -> int64
float, double -> double
だね。
ありがとう。まさに今その1をやったところ。
地味だがこれが一番分かりやすい。
ラップしまくるのは気になるが、C++の世界だとコンパイラが最適化してくれることを期待するんだよな?
traitは後日試してみるわ。本来はそっちの方が本筋なのだろうし。
今回は精度最高型で演算するだけだから規則は簡単。
char, short, int -> int64
float, double -> double
だね。
214デフォルトの名無しさん (ワッチョイ 0f92-D+C1)
2017/04/19(水) 17:05:51.26ID:zKKKUYsP0215デフォルトの名無しさん (ワッチョイ 6b3c-V7Gz)
2017/04/19(水) 19:31:59.93ID:suSDkWlT0 >>213
>コンパイラが最適化してくれることを期待するんだよな?
まず試せw
VCで逆アセンブル見るなり
https://gcc.godbolt.org/#
↑これで見るなり
厳密には知らんが、関数テンプレートは大体inlineつけなくても最適化でインライン展開の対象になる
>コンパイラが最適化してくれることを期待するんだよな?
まず試せw
VCで逆アセンブル見るなり
https://gcc.godbolt.org/#
↑これで見るなり
厳密には知らんが、関数テンプレートは大体inlineつけなくても最適化でインライン展開の対象になる
216デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 19:52:27.59ID:37YtuUfA0 >>215
まあそうなんだけど、今回については
・仮に遅くなったとしてもやる
・最終的にはアセンブラに差し替える
という、主に編集上の都合なのでどの道やるんだわ。
最悪、手でコピペして展開すれば直結出来ると分かっているから、その辺は安心。
テンプレート慣れしてないから、いちいちラップするのが気持ち悪いが、
そんなもんだというのなら慣れるしかない。
ただやっぱ、見た目直感的なコードではなくなるのが残念なところ。
varにしたら自動的にテンプレートになって、
文句がある場合のみ手動で特殊化が一番助かるんだが。
まあそうなんだけど、今回については
・仮に遅くなったとしてもやる
・最終的にはアセンブラに差し替える
という、主に編集上の都合なのでどの道やるんだわ。
最悪、手でコピペして展開すれば直結出来ると分かっているから、その辺は安心。
テンプレート慣れしてないから、いちいちラップするのが気持ち悪いが、
そんなもんだというのなら慣れるしかない。
ただやっぱ、見た目直感的なコードではなくなるのが残念なところ。
varにしたら自動的にテンプレートになって、
文句がある場合のみ手動で特殊化が一番助かるんだが。
217デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
2017/04/19(水) 21:04:11.42ID:15mBJgd3M218デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 21:47:13.23ID:37YtuUfA0 >>217
いやあれ属性でやろうとしてるでしょ。
普通に型名で書いた方が楽だよね。特殊化みたいに。
変に汎用化させようとして、余計に分かりにくくなってるよ。
なんつーか、C++ってそっちの傾向あるでしょ。変に技巧に凝りすぎというか。
テンプレートにしても、編集上の努力であって、新機能追加やバグ取りにはならないし。
努力の方向を間違えたら完全に空回りてしまう。
varで書かせてくれよとマジで思うよ。
いやあれ属性でやろうとしてるでしょ。
普通に型名で書いた方が楽だよね。特殊化みたいに。
変に汎用化させようとして、余計に分かりにくくなってるよ。
なんつーか、C++ってそっちの傾向あるでしょ。変に技巧に凝りすぎというか。
テンプレートにしても、編集上の努力であって、新機能追加やバグ取りにはならないし。
努力の方向を間違えたら完全に空回りてしまう。
varで書かせてくれよとマジで思うよ。
219デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
2017/04/19(水) 22:18:24.03ID:15mBJgd3M varと書けるようにするとなぜ新機能開発やバグ取りにできるの??
templateで何ができないと言ってるのかまじで意味わからん
templateをマクロと同じように使おうとしかしてないから編集上の機能に見えるだけでしょ?
ランタイムのオーバーヘッドをなくすために使うんだよ普通は
てか属性でやろうとしてるってなんだよ、現行C++にattributeなんてねーよクソカス
高精度型にキャストしたいならtraitsとdispatch用の関数書くだけ
templateで何ができないと言ってるのかまじで意味わからん
templateをマクロと同じように使おうとしかしてないから編集上の機能に見えるだけでしょ?
ランタイムのオーバーヘッドをなくすために使うんだよ普通は
てか属性でやろうとしてるってなんだよ、現行C++にattributeなんてねーよクソカス
高精度型にキャストしたいならtraitsとdispatch用の関数書くだけ
220デフォルトの名無しさん (ワッチョイ 6b3c-V7Gz)
2017/04/19(水) 22:29:39.45ID:suSDkWlT0 >>218
言いたいことはわからんでもないけどな
他人はどうか知らんが、自分はSTLやboostのコードを分かりやすいとは全く思わん
ヘッダで公開してるから(そうせざるを得ないんだが)アレを全員目指すべきと勘違いしてる人はいるかもしれんw
言ってしまえば、テンプレートで設計の幅広げたり高速化したり、ってのはあくまで副産物的に生まれたトリックに過ぎんし
そういうライブラリはきちんとドキュメントが存在しないと使い物にならん(あれば超便利なんだが)
そもそもほぼC++しかやってないのでvarが何なのかよーわからんが。
関数型言語みたいな記述力を求めてんのかね?
言いたいことはわからんでもないけどな
他人はどうか知らんが、自分はSTLやboostのコードを分かりやすいとは全く思わん
ヘッダで公開してるから(そうせざるを得ないんだが)アレを全員目指すべきと勘違いしてる人はいるかもしれんw
言ってしまえば、テンプレートで設計の幅広げたり高速化したり、ってのはあくまで副産物的に生まれたトリックに過ぎんし
そういうライブラリはきちんとドキュメントが存在しないと使い物にならん(あれば超便利なんだが)
そもそもほぼC++しかやってないのでvarが何なのかよーわからんが。
関数型言語みたいな記述力を求めてんのかね?
221デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
2017/04/19(水) 22:39:24.29ID:37YtuUfA0 >>219
templateを使わずに同じ事を実現出来る環境なら、
その時間を新機能追加やバグ取りに使えるって事だよ。
実際、JavaScriptとかはそうなんだよ。
ただし、あっちには別の問題があるのだけどね。
templateを使わずに同じ事を実現出来る環境なら、
その時間を新機能追加やバグ取りに使えるって事だよ。
実際、JavaScriptとかはそうなんだよ。
ただし、あっちには別の問題があるのだけどね。
222デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
2017/04/19(水) 22:50:14.02ID:q88wQIwA0 でたJavascript
やっぱりstd::bindは高機能すぎるからオーバーヘッドが有るとか言ってた奴か。
やっぱりstd::bindは高機能すぎるからオーバーヘッドが有るとか言ってた奴か。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★2 [冬月記者★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 ★2 [蚤の市★]
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ ★2 [Hitzeschleier★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★5 [Hitzeschleier★]
- 元草津町議会議員 新井祥子さんの裁判判決を受けて | 全国フェミニスト議員連盟 [少考さん★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 【悲報】ネトウヨの次のターゲット「渡邊渚」に決まるwwwwwwwwwwwwwwwwwwwww [455031798]
- 【悲報】ChatGPT、アダルトモードは2026年に延期!繰り返す!延期! [673057929]
- 竹中平蔵「日米が長年守り続けてき台湾有事に関する曖昧戦略の知恵を一瞬にして無にさせた岡田の責任は非常に重い」 [271912485]
- 履歴書の趣味特技のとこ手芸って書いた
- お こ め 暴 落
- 中国人、超ド正論。「チベットやウイグルに住んでるのはチベット族やウイグル族だが、アイヌから奪った土地に住んでる日本人こそ侵略者」 [314039747]
