次スレを立てる時は本文の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:UkLjKqcm0110デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/09(日) 20:34:41.52ID:elB46Etj0 >>108
互いに正しく適合する「宣言」と「定義」からなるプログラムにとって「仮定義」の概念は不要なのだから、
この場合何を追認したかというと既存のソースコードにおける「extern」の誤用を追認したとしか考えられないのでは…
つまり言語規格の既存の条項が「追認」されたわけではなく、あくまで条項が「追加」されたんである
(多分「追認」なんて定義もされていないだろうし、
互いに正しく適合する「宣言」と「定義」からなるプログラムにとって「仮定義」の概念は不要なのだから、
この場合何を追認したかというと既存のソースコードにおける「extern」の誤用を追認したとしか考えられないのでは…
つまり言語規格の既存の条項が「追認」されたわけではなく、あくまで条項が「追加」されたんである
(多分「追認」なんて定義もされていないだろうし、
111デフォルトの名無しさん (ワッチョイ 722b-Crua)
2017/04/09(日) 20:52:23.27ID:k8qrPdcw0 >>106
> 総合すると、CでもC++でも「extern」 = 「外部リンケージ」、でおkなのでは…
ちょっと端折り過ぎかな
n3797(C++14) 7.1.1 Storage class specifiers Example:
static int b; // b has internal linkage
extern int b; // b still has internal linkage
> 総合すると、CでもC++でも「extern」 = 「外部リンケージ」、でおkなのでは…
ちょっと端折り過ぎかな
n3797(C++14) 7.1.1 Storage class specifiers Example:
static int b; // b has internal linkage
extern int b; // b still has internal linkage
112デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
2017/04/09(日) 21:03:07.96ID:9WDYOgp70113デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
2017/04/09(日) 21:04:18.72ID:9WDYOgp70 今となっては忸怩たる思いだが
俺は「追認された」張本人の1人であって
俺は「追認された」張本人の1人であって
114デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 21:32:38.73ID:djBIOydUr115デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 21:52:43.91ID:djBIOydUr116デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 22:01:05.39ID:djBIOydUr >103
そのサイトのANSI Cの説明は多分ウソだぞ
同じ内容なはずのISO Cはそんな定義じゃないから
そのサイトのANSI Cの説明は多分ウソだぞ
同じ内容なはずのISO Cはそんな定義じゃないから
117デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/10(月) 14:43:46.26ID:DheowmrF0 おまえら規格票くらい買うか、せめてドラフトくらい用意しろや
External object definitions
Semantics
If the declaration of an identifier for an object has file scope and an initializer,
the declaration is an external definition for the identifier.
A declaration of an identifier for an object that has file scope without an initializer,
and without a storage-class specifier or with the storage-class specifier static,
constitutes a tentative definition. If a translation unit contains one or
more tentative definitions for an identifier, and the translation unit contains
no external definition for that identifier, then the behavior is exactly as
if the translation unit contains a file scope declaration of that identifier,
with the composite type as of the end of the translation unit, with an initializer equal to 0.
If the declaration of an identifier for an object is a tentative definition and
has internal linkage, the declared type shall not be an incomplete type.
今どき「ANSI C」とか言っちゃってるサイトは眉に唾してかかれ
External object definitions
Semantics
If the declaration of an identifier for an object has file scope and an initializer,
the declaration is an external definition for the identifier.
A declaration of an identifier for an object that has file scope without an initializer,
and without a storage-class specifier or with the storage-class specifier static,
constitutes a tentative definition. If a translation unit contains one or
more tentative definitions for an identifier, and the translation unit contains
no external definition for that identifier, then the behavior is exactly as
if the translation unit contains a file scope declaration of that identifier,
with the composite type as of the end of the translation unit, with an initializer equal to 0.
If the declaration of an identifier for an object is a tentative definition and
has internal linkage, the declared type shall not be an incomplete type.
今どき「ANSI C」とか言っちゃってるサイトは眉に唾してかかれ
118デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/10(月) 14:44:01.60ID:DheowmrF0 EXAMPLE 1
int i1 = 1; // definition, external linkage
static int i2 = 2; // definition, internal linkage extern
int i3 = 3; // definition, external linkage
int i4; // tentative definition, external linkage
static int i5; // tentative definition, internal linkage
int i1; // valid tentative definition, refers to previous
int i2; // 6.2.2 renders undefined, linkage disagreement
int i3; // valid tentative definition, refers to previous
int i4; // valid tentative definition, refers to previous
int i5; // 6.2.2 renders undefined, linkage disagreement
extern int i1; // refers to pre vious, whose linkage is external
extern int i2; // refers to pre vious, whose linkage is internal
extern int i3; // refers to pre vious, whose linkage is external
extern int i4; // refers to pre vious, whose linkage is external
extern int i5; // refers to pre vious, whose linkage is internal
EXAMPLE 2
If at the end of the translation unit containing
int i[];
the array i still has incomplete type, the implicit initializer causes it to have one element,
which is set to zero on program startup.
int i1 = 1; // definition, external linkage
static int i2 = 2; // definition, internal linkage extern
int i3 = 3; // definition, external linkage
int i4; // tentative definition, external linkage
static int i5; // tentative definition, internal linkage
int i1; // valid tentative definition, refers to previous
int i2; // 6.2.2 renders undefined, linkage disagreement
int i3; // valid tentative definition, refers to previous
int i4; // valid tentative definition, refers to previous
int i5; // 6.2.2 renders undefined, linkage disagreement
extern int i1; // refers to pre vious, whose linkage is external
extern int i2; // refers to pre vious, whose linkage is internal
extern int i3; // refers to pre vious, whose linkage is external
extern int i4; // refers to pre vious, whose linkage is external
extern int i5; // refers to pre vious, whose linkage is internal
EXAMPLE 2
If at the end of the translation unit containing
int i[];
the array i still has incomplete type, the implicit initializer causes it to have one element,
which is set to zero on program startup.
119デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/10(月) 14:44:21.17ID:DheowmrF0 6.9.2 外部オブジェクト定義
意味規則 オブジェクトの識別子の宣言がファイル有効範囲及び初期化子をもつ場合,その宣言を識別子の外部定義という。
ファイル有効範囲のオブジェクトの識別子を,初期化子を使わず,かつ,記憶域クラス指定子なしか又は記憶域クラス指定子static で宣言する場合,そのオブジェクトの識別子の宣言を仮定義(tentativedefinition)という。
翻訳単位が,ある識別子に対する仮定義を一つ以上含み,かつその識別子に対する外部定義を含まない場合,その翻訳単位に,翻訳単位の終わりの時点での合成型,及び0 に等しい初期化子をもったその識別子のファイル有効範囲の宣言がある場合と同じ規則で動作する。
オブジェクトに対する識別子の宣言が仮定義であり,内部結合をもつ場合,その宣言の型は不完全型であってはならない。
意味規則 オブジェクトの識別子の宣言がファイル有効範囲及び初期化子をもつ場合,その宣言を識別子の外部定義という。
ファイル有効範囲のオブジェクトの識別子を,初期化子を使わず,かつ,記憶域クラス指定子なしか又は記憶域クラス指定子static で宣言する場合,そのオブジェクトの識別子の宣言を仮定義(tentativedefinition)という。
翻訳単位が,ある識別子に対する仮定義を一つ以上含み,かつその識別子に対する外部定義を含まない場合,その翻訳単位に,翻訳単位の終わりの時点での合成型,及び0 に等しい初期化子をもったその識別子のファイル有効範囲の宣言がある場合と同じ規則で動作する。
オブジェクトに対する識別子の宣言が仮定義であり,内部結合をもつ場合,その宣言の型は不完全型であってはならない。
120デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/10(月) 14:45:14.16ID:DheowmrF0 例1.
int i1 = 1; // 定義,外部結合
static int i2 = 2; // 定義,内部結合
extern int i3 = 3; // 定義,外部結合
int i4; // 仮定義,外部結合
static int i5; // 仮定義,内部結合
int i1; // 正しい仮定義,前の定義を参照する
int i2; // 前に内部結合をもつ定義があるため,結合の不一致が生じ,6.2.2 によって動作は未定義となる
int i3; // 正しい仮定義,前の定義を参照する
int i4; // 正しい仮定義,前の定義を参照する
int i5; // 前に内部結合をもつ定義があるため,結合の不一致が生じ,6.2.2 によって動作は未定義となる
extern int i1; // 外部結合をもつ前の定義を参照する
extern int i2; // 内部結合をもつ前の定義を参照する
extern int i3; // 外部結合をもつ前の定義を参照する
extern int i4; // 外部結合をもつ前の定義を参照する
extern int i5; // 内部結合をもつ前の定義を参照する
例2. 翻訳単位が
int i[];
を含み,その翻訳単位の最後で,配列i が依然として不完全型をもつ場合,配列i は暗黙の初期化子によって一つの要素をもつようにされる。その要素にはプログラム開始時に0 がセットされる。
int i1 = 1; // 定義,外部結合
static int i2 = 2; // 定義,内部結合
extern int i3 = 3; // 定義,外部結合
int i4; // 仮定義,外部結合
static int i5; // 仮定義,内部結合
int i1; // 正しい仮定義,前の定義を参照する
int i2; // 前に内部結合をもつ定義があるため,結合の不一致が生じ,6.2.2 によって動作は未定義となる
int i3; // 正しい仮定義,前の定義を参照する
int i4; // 正しい仮定義,前の定義を参照する
int i5; // 前に内部結合をもつ定義があるため,結合の不一致が生じ,6.2.2 によって動作は未定義となる
extern int i1; // 外部結合をもつ前の定義を参照する
extern int i2; // 内部結合をもつ前の定義を参照する
extern int i3; // 外部結合をもつ前の定義を参照する
extern int i4; // 外部結合をもつ前の定義を参照する
extern int i5; // 内部結合をもつ前の定義を参照する
例2. 翻訳単位が
int i[];
を含み,その翻訳単位の最後で,配列i が依然として不完全型をもつ場合,配列i は暗黙の初期化子によって一つの要素をもつようにされる。その要素にはプログラム開始時に0 がセットされる。
121デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/10(月) 18:45:17.26ID:srG0I8DXr N1570のリンクを貼ったら、真実を知った>>100が傷ついちゃうかも知れないと思って遠慮してた
122デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/10(月) 23:59:41.82ID:srG0I8DXr とりあえずC++のリンケージ仕様でも投下しとくか
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2017/
ここのN4660(C++17 DIS)の6.5節の段落3〜4あたりだな
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2017/
ここのN4660(C++17 DIS)の6.5節の段落3〜4あたりだな
123デフォルトの名無しさん (ワッチョイ 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段重ねれば良いだけか?という気がしてきた。
あまり自信はないが。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】Jリーグ、43億円の赤字予算を承認 ★2 [鉄チーズ烏★]
- 「レーダー照射」なぜ中国は素直に謝罪しないのか 非を認めず反論、逆ギレ「ごめんなさい」と言えない国情★3 [七波羅探題★]
- 松村沙友理、スタバは好きだけど「やっぱコーヒーに700円800円が…」「家でお湯わかしてやったらタダやん」 [muffin★]
- 40代教員、1億8600万円分の暗号資産だまし取られる 「警察手帳のような物」見せられ−滋賀県草津市 [蚤の市★]
- 上野動物園の双子パンダ、1月末に中国に返還へ 国内でパンダ不在に ★4 [蚤の市★]
- 【ラブホ】小川晶前市長、出直し立候補意向 周囲に伝達 群馬・前橋市長選 [ぐれ★]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★7
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★8
- ブレイキングダウンの試合前挑発タイムでくも膜下出血 朝倉未来の責任は [279254606]
- フリーターだけどフルタイム並に働かされてる
- お前らって俺のことどう思ってるの?
- 困ったことにカレーも食べたいけどトンカツも食べたい
