C++相談室 part130at TECH
C++相談室 part130 - 暇つぶし2ch1:デフォルトの名無しさん(ワッチョイ f37a-QmV0)
17/03/31 08:47:49.65 UkLjKqcm0.net
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part129
スレリンク(tech板)
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
スレリンク(tech板)
■長いソースを貼るときはここへ。■
 URLリンク(codepad.org)
 URLリンク(ideone.com)
[C++ FAQ]
URLリンク(isocpp.org)
URLリンク(www.bohyoh.com) (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

2:デフォルトの名無しさん (ワッチョイ bf54-lR6P)
17/03/31 16:52:18.52 CoeIAoH10.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----

3:デフォルトの名無しさん (ワッチョイ 3f78-QHHb)
17/03/31 17:03:31.51 qlAKv2q70.net
>>1

4:デフォルトの名無しさん (ワッチョイ ef14-oQcP)
17/04/01 09:35:38.04 JSPgwSTt0.net
テンプレートで曖昧なものは強制的に解決させる方法ってあります?
template<typename A, typename B> void func(A a, B b);
func(2.f,3.f); // float
func(2.,3.); // double
func(2.f,3.);// floatで呼び出したい

5:デフォルトの名無しさん (オッペケ Sr17-bOuD)
17/04/01 10:06:09.92 vvD/Bq3hr.net
こういう質問を見ると
何処に落とし穴が有るのだろうと勘ぐってしまう

6:デフォルトの名無しさん (ワッチョイ d3a6-agmj)
17/04/01 10:15:43.84 vxnrpS460.net
「強制的に」の解釈だろうね

7:デフォルトの名無しさん (ワッチョイ cf29-MCV6)
17/04/01 10:21:35.44 8wn5/JcH0.net
func<float, float>(2.f, 3.);

8:今日は何の日? (ワッチョイ bf7a-mgDT)
17/04/01 11:36:07.15 3A8hlFXh0.net
'f' 一文字で済む方法が2行上に示されているが…
func(2.f,(float)3.); // てへっ
出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
スペシャライゼーションか非テンプレート版でイグザクトマッチを
用意すればいいじゃないかな
func(2.,3.f); の時は float 優先なのか第一引数優先なのか
ロジックによっては元の設計を見直すべきかも

9:デフォルトの名無しさん (ワッチョイ ef14-oQcP)
17/04/01 11:43:51.07 JSPgwSTt0.net
>>8
>出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
そういうことです
static_castが可能な型同士に限定されるとは思いますが
>スペシャライゼーションか非テンプレート版でイグザクトマッチ
なるほど
なおfunc(2.,3.f)でもfloatですね

10:デフォルトの名無しさん (ワッチョイ a356-8BmZ)
17/04/01 11:59:09.40 gOIdtRSt0.net
お前にテンプレートはまだはやい

11:デフォルトの名無しさん (オッペケ Sr17-bOuD)
17/04/01 12:50:11.46 vvD/Bq3hr.net
>スペシャライゼーションか
実用性皆無の糞コードしか想像出来ない

12:デフォルトの名無しさん (ワッチョイ 3f3b-MCV6)
17/04/01 18:22:19.01 2DXDopa10.net
そもそも糞コードしか書けない人は何に対してもそうだろ

13:デフォルトの名無しさん (ワッチョイ f37a-QmV0)
17/04/01 19:25:28.02 Pijd2zbh0.net
練習しなきゃ良いコードは書けるようにならない

14:デフォルトの名無しさん (オッペケ Sr17-bOuD)
17/04/01 19:35:34.93 iUvRbgEsr.net
そうだな
ただ練習したら必ず良いコードが書ける訳でもない
例えばPODをコピーするのにpragma pack1してmemcpyし始めるK&Rおじさんとか

15:デフォルトの名無しさん (ワッチョイ f359-HQfx)
17/04/01 19:38:01.60 p1TV7r2C0.net
個人的には関数引数の弱い型への変換という
C++言語規約上の暗黙的変換とは逆の流れを引き起こすような記述を
通常と同じような見かけの記述にすることは紛らわしいと希ガス
コード共通化を重視するなら>>7に従うか、あるいはfunc(2.f, 3.f)にするとかして呼び出し元で型を明示し、
そうではなくて弱い型への暗黙的変換を伴うバージョンのfunc()が他とは別のコードになる(スペシャライゼーション対象足りえる
なら、スペシャライゼーションの代わりにfuncを別名にするとかとにかく一目でわかるようにするのが実用的
かと、

16:デフォルトの名無しさん (ワッチョイ f37a-QmV0)
17/04/01 21:58:54.19 Pijd2zbh0.net
>>14
練習とは既にあるより良い方法を真似することだから身につかないのは練習になっていないかやる気が無いかだ

17:デフォルトの名無しさん (ワッチョイ 3f6f-MCV6)
17/04/02 07:31:30.34 NX0JHgEX0.net
誰か15を日本語訳してくれ

18:デフォルトの名無しさん (オッペケ Sr17-bOuD)
17/04/02 07:42:27.51 0DgUIb4er.net
>>17
・func(0.0f, 0.0)は一見精度落ちない様に見えるがfloatに落ちるのが嫌
・だからfnuc<float>の様な明示的な呼び出しにするか、fnuc_fの様な名前で工夫すべき
・template<> func<double,float>なんて特殊化する暇があったら
 非テンプレートのfuncf作れ
・つまりfloat v;「v=0.0;」もコンパイラーの警告だけなのでNG
・もう変数名はシステムハンガリアンしか無いぜ

19:デフォルトの名無しさん (オッペケ Sr17-bOuD)
17/04/02 08:00:42.30 0DgUIb4er.net
型変換に於ける定数のルールはC++11で見直されたので
「v=0.0;」は例が良くなかったな。まあいいか

20:デフォルトの名無しさん (ワッチョイ f359-HQfx)
17/04/02 08:01:44.33 M04XElTC0.net
>>18
最後の二つはイラン
やっても良いが第1項目の対策としては過剰すぐる、

21:デフォルトの名無しさん (ワッチョイ bf6b-agmj)
17/04/02 11:47:36.98 XLcHLDuG0.net
計算がメインの、建築用CADとか、航空流体力学のちょっとしたソフトとかだと、過剰ではないかもしれない
doubleとfloatとでの四つの組み合わせがちょくちょく登場する計算、
funcのfloatとdoubleの組み合わせで厳密に誤差計算しているような気がする
もしもそうだとすると単精度の誤差すらも気にするようなヤバいシステムがコードの背後に見える
……トカマク式核融合炉の制御ソフトの一部かもな

22:デフォルトの名無しさん (スッップ Sddf-M0et)
17/04/03 21:44:49.44 muLND53td.net
AD変換器なんてノイズ多い環境じゃ16bit以上のものなんて使えないぞ
電力関係なら12bit位だろ
いかにその分解能でしっかり制御するかが重要で
算数的な精度なんてどーでもいいのさ

23:デフォルトの名無しさん (ワッチョイ b310-MCV6)
17/04/03 21:49:37.61 iUZo1Vn10.net
最後の1行を除き同意

24:デフォルトの名無しさん (スッップ Sddf-M0et)
17/04/03 22:07:16.82 muLND53td.net
偉い人向けに表示上だけは電卓に合わせないとうるさいって話かな

25:デフォルトの名無しさん (ワッチョイ f37a-QmV0)
17/04/03 22:36:46.92 rMPFCCT20.net
電池とかのラインで使われてる計測器だと有効なのは小数点以下は3桁くらいまでかな

26:デフォルトの名無しさん (ワッチョイ b310-MCV6)
17/04/03 22:41:35.95 iUZo1Vn10.net
最小目盛りの10分の1

27:デフォルトの名無しさん (ワッチョイ ef14-oQcP)
17/04/03 22:48:03.77 teq5sGj/0.net
数学的なベクトルのクラスで
template<int N> vec{ double v[N];};
などとした場合、コンストラクタで各成分を指定したいようなときって
どうするのが筋ですかね?
それとも引数の数が変わるのがわかってるようなケースはテンプレートすべきではない?

28:デフォルトの名無しさん (オッペケ Sr17-bOuD)
17/04/03 22:59:42.22 /XngI6+6r.net
こういういかにもな質問を見ると、
何処に落とし穴が有るのだろうと勘ぐってしまう

29:デフォルトの名無しさん (ワッチョイ bf80-QHHb)
17/04/03 23:08:28.79 BzAHvGte0.net
>>27
俺は配列で初期化して渡してる。
一瞬本末転倒な気もするが、これが一番スッキリする。

30:デフォルトの名無しさん (ワッチョイ ef14-oQcP)
17/04/03 23:15:39.73 teq5sGj/0.net
double d[]={0.,1.,2.};
vec v(d);
みたいなことですかね?
あと今思いついたのは共通に処理できるところだけ
template<int N> struct vec_base{double v[N];}
template<int N> struct vec {};
template<>strct vec<3> : public vec_base<3>{ vec(double, double, double);};
みたいな

31:デフォルトの名無しさん (ワッチョイ bfcd-jsM4)
17/04/03 23:18:11.93 xWKBtMgw0.net
可変長テンプレートじゃだめなの

32:デフォルトの名無しさん (ワッチョイ ef14-oQcP)
17/04/03 23:38:46.07 teq5sGj/0.net
そんなのありましたね・・・
調べてみます

33:デフォルトの名無しさん (ワッチョイ bfcc-hXdu)
17/04/04 02:27:46.41 cqsAbaT40.net
template<int... args>

34:デフォルトの名無しさん (ワッチョイ 733c-kVPK)
17/04/04 12:47:55.32 CFV3B2Uw0.net
Nは要素数だからそれじゃダメやろ

35:デフォルトの名無しさん (スッップ Sddf-mnw5)
17/04/04 13:09:36.94 6xG2515ud.net
template <typename... T> は機能するけどこの場合ちょっとやだな

36:デフォルトの名無しさん (ワッチョイ 3f91-MCV6)
17/04/04 15:20:53.13 SRqXkALx0.net
sizeof... の使いどころじゃね?

37:デフォルトの名無しさん (オッペケ Sr17-bOuD)
17/04/04 17:42:54.88 Xbh3DIbfr.net
質問者がコンストラクターを使用したいと言っている以上
残念なコードになることは不可避
static_assertでも入れとくしかない

38:デフォルトの名無しさん (オッペケ Sr17-bOuD)
17/04/04 20:17:58.88 Xbh3DIbfr.net
ネタも投下されないようなので取り敢えず貼っとくか
URLリンク(ideone.com)

39:デフォルトの名無しさん (ワッチョイ bf80-QHHb)
17/04/04 20:55:09.83 vk9hQqDM0.net
>>30
まさにそれ。
イロイロ思考した末にそこに辿り着いた。
C++11以降なら初期化リストやstd::arrayが使えるんだけどね…

40:デフォルトの名無しさん (ワッチョイ cf59-dxaC)
17/04/06 07:41:45.88 aL+qmOiO0.net
質問ですが、bool型の変数x値(true/false)をint型の1/0に変換する場合、
(int)xで正しいの?それとも演算子を使ってx!=falseとか!!xとすべき?
あるいは
 int y; if(x) { y = 1; } else { y = 0; }
式にやらなきゃダメ?
そもそもC++においても「!」、「!=」、「==」(オーバーロードされていないやつ)はintを返すんやろうか…

41:デフォルトの名無しさん (ワッチョイ be14-4Usw)
17/04/06 07:49:27.05 XYhavOUb0.net
x?1:0

42:デフォルトの名無しさん (ワッチョイ f3b4-GJ90)
17/04/06 08:13:07.80 WJuxfIBi0.net
N4660の
7.6p6
8.3.1p9
8.10p1
あたりを読んでから質問するという発送は無いものか

43:デフォルトの名無しさん (ワッチョイ 7f93-+TA9)
17/04/06 08:18:19.01 3pIc1pJU0.net
>>40
std::cout << typeid(!0).name();
こんくらいやってみた?

44:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/06 08:36:31.85 8pWbCGLcr.net
一般人はtypeidを知らない可能性があるが
auto x = (0 == 0);
と書いてxの上にマウスカーソルを持って行く知能は欲しいところ

45:デフォルトの名無しさん (ワッチョイ 7f93-+TA9)
17/04/06 08:49:41.77 3pIc1pJU0.net
一般人てコンパイラって何?な人?

46:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/06 10:25:11.03 zY+rYc0kr.net
企業に勤めていて日常的にC++言語を使うような人、かな

47:デフォルトの名無しさん (ワッチョイ 7f93-+TA9)
17/04/06 11:12:46.55 3pIc1pJU0.net
日常的にC++使っててtypeid知らないなんて死刑だろ

48:デフォルトの名無しさん (スッップ Sd92-dvjh)
17/04/06 11:30:17.09 b6mS5n8zd.net
知っていても使わないなあ
試しに実験したことはあるかも

49:デフォルトの名無しさん (スッップ Sd92-dvjh)
17/04/06 11:30:45.11 b6mS5n8zd.net
C++たまにしか使いません

50:デフォルトの名無しさん (ワッチョイ fb4a-TXVw)
17/04/06 18:35:51.13 H/56SjdK0.net
少し前からDXライブラリの勉強を始めました
「ポンクソフト」というサイトさんの「C/C++言語とDXライブラリでゲーム作成入門」というページを真似ながら勉強しています
そこの「6.オセロの作成」に先程着手したんですが、何度見返しても以下のエラーが出て実行できません
一つ目:コードC3872「'0x200e':この文字を識別子で使用することはできません」行67
二つ目:コードC3872「'0x200e':この文字を識別子で使用することはできません」行80
解決方を求めて「C3872」「0x200e」などと検索したんですが、解決方を見つけることは叶いませんでした
どなたか私に原因と解決方を教えて下さい

51:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd92-+G+c)
17/04/06 18:43:30.36 0SmLVS9od.net
>>50
全角文字と半角文字の違いに気を付けて。コンピュータは全角と半角を区別する。

52:デフォルトの名無しさん (ワッチョイ f26b-D6lx)
17/04/06 18:43:47.28 oAa8xYYx0.net
そこのURLを貼ってくれると話はさらに早くなる

53:デフォルトの名無しさん (ワッチョイ fb4a-TXVw)
17/04/06 18:53:48.85 H/56SjdK0.net
>>51
エラーの出た行を3回ほど確認しましたが全角文字は見当たりませんでした
>>52
URLリンク(ponk.jp)」です

54:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/06 19:06:55.02 zY+rYc0kr.net
そりゃpriorityの後に変な文字が入ってるからな
U+200EはC++で使っていい文字に入っていない

55:デフォルトの名無しさん (ワッチョイ f22a-UNHW)
17/04/06 19:17:42.97 NIAe6HmI0.net
確かに67行目と80行目の"priority"の右に見えない文字 (LRM) が入ってるね
なんでこんなもんが紛れてるのか謎だけどそれを消せばコンパイル通るんじゃない

56:デフォルトの名無しさん (ワッチョイ fb4a-TXVw)
17/04/06 19:19:47.39 H/56SjdK0.net
>>54
今まで見るだけの確認作業してましたがpriorityの直後でdeleteキー押したら確かに謎の文字が消えました!
>>51-52>>54
質問に答えていただきありがとうございました

57:デフォルトの名無しさん (ワッチョイ fb4a-TXVw)
17/04/06 19:23:16.61 H/56SjdK0.net
>>55
消したらコンパイル通りました
今までは「サイトのコピペ」→「解説読んで納得」→「各文に自分が分かるようにコメント付け」という方法で勉強してたので、
これを機にコピペはやめて全て自分で打ち込むことにします
ありがとうございました

58:デフォルトの名無しさん (ワッチョイ cf7a-02AM)
17/04/06 20:18:57.75 yrLcUnI00.net
>>42
普通その数字が何を意味するのかすらわからねえよ

59:デフォルトの名無しさん (ワッチョイ 52c3-7E04)
17/04/06 21:09:55.73 i8ka60Xp0.net
>>42
なんで贈り物送らないといけないのか

60:デフォルトの名無しさん (ワッチョイ cfb5-H1JN)
17/04/07 00:12:27.63 GKfKrOhh0.net
>>57
コピペ後に理解というやり方から
理解した上で打ち込むって考え方がいいと思うよ
実務でも似たような処理をコピペした時に
別の変数参照するように変える必要があったのに
1ヶ所変え忘れて問題になった何て言う事例もありがち

61:デフォルトの名無しさん (ワッチョイ d2ed-2ODd)
17/04/07 00:44:12.95 T22AFNFv0.net
勉強中は兎も角、実務でコピペコーディングしてバグ仕込むとか入念に拷問した後死刑でも仕方ないレベルだからな

62:デフォルトの名無しさん (ワッチョイ cf7a-02AM)
17/04/07 01:17:29.90 hMKnjdw+0.net
そんなにコピペすることってあるか?

63:デフォルトの名無しさん (ワッチョイ 0775-yu7M)
17/04/07 02:53:31.90 k32kujyO0.net
ないアルよ

64:デフォルトの名無しさん (ワッチョイ fb79-xvm/)
17/04/07 03:15:46.83 2Lzx/lCN0.net
まあ、スニペットなんて言い方してても実態はコピペだからな。

65:デフォルトの名無しさん (ワッチョイ 2213-D6lx)
17/04/07 12:08:05.92 9gQAwyyc0.net
プログラミングなんて同じことの繰り返しなんだから、コピペで済ませたほうがいいよ

66:デフォルトの名無しさん (スップ Sdb2-C2yt)
17/04/07 12:42:46.10 ykM1heJrd.net
コード書いてていうほどコピペしなくね

67:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/07 14:14:16.56 FkJcTuLk0.net
コピペしなきゃいけない自分が情けなくなるね
同じことを二度は言わないスマートさが足りないんだって

68:デフォルトの名無しさん (JP 0H2e-TKAZ)
17/04/07 15:08:17.29 4pSi19lZH.net
static int a[]; // prototype
static int a[] = {1,2,3,4};
int getitem(int n) {
return a[n];
}
このコード、
gcc -Wall -c -o hoge.o hoge.c
だったら何のエラーも警告も出ないけど、
g++ -Wall -c -o hoge.o hoge.c
だとaのサイズがわからん、とエラーになるんですが、
c++だとどう書けばいいんですか?

69:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/07 17:44:51.15 FkJcTuLk0.net
namespace
{
extern int a[]; // prototype
int a[] = {1,2,3,4};
}
int getitem(int n) {
return a[n];
}

70:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/08 12:17:44.66 TFmwEDa6r.net
extern int a[]; はprototypeじゃないけどな

71:デフォルトの名無しさん (ワッチョイ cf59-dxaC)
17/04/08 13:44:56.17 L4KgTOQ90.net
未だにexternの役割がよくわかんね;
付けなくても宣言できて勝手に外部リンケージになるし…
K&R本はどっか行った;

72:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/08 16:54:00.75 LBU0hU+r0.net
実体を定義するのかしないのか曖昧なところをはっきりさせたり
デフォで内部結合なものを強制的に外部結合させたり
無名namespaceは逆で強制的に外部結合なものに妨害工作する

73:デフォルトの名無しさん (アウアウイー Sa97-lIlP)
17/04/08 17:25:09.91 8P1QJwbCa.net
>>69の方がC++としてモダンなのはわかるが、>>68がC++だけエラーになる理由がわからん。
gcc以外のコンパイラでもだめなんだろうか?

74:デフォルトの名無しさん (ワッチョイ fb56-Hufg)
17/04/08 17:34:57.89 8rt7+cSn0.net
//static int a[]; // prototype
static int a[] = {1,2,3,4};
これでOK

75:デフォルトの名無しさん (アウアウイー Sa97-lIlP)
17/04/08 17:54:16.17 8P1QJwbCa.net
↓みたいに、相互参照するstaticなデータを初期化するときはどうするのよ?
こういうのは、CとC++で互換性あるコードは書けんのかね?
#include <stdio.h>
st


76:ruct A { char *s; struct A *p; }; static struct A a[]; static struct A b[] = {{"1st in b[]", a}, {"2nd in b[]", a+1}}; static struct A a[] = {{"1st in a[]", b}, {"2nd in a[]", b+1}}; int main(){ printf("%s, %s\n", a[0].s, a[0].p->s); printf("%s, %s\n", b[1].s, b[1].p->s); return 0; }



77:デフォルトの名無しさん (ワッチョイ 36a3-D6lx)
17/04/08 18:22:48.95 lscI+aDp0.net
前方宣言の方のstaticを削りゃいいんじゃね?

78:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd92-+G+c)
17/04/08 18:29:35.52 QtLPEhOXd.net
static変数を別の翻訳単位から参照するのはおかしいんじゃね? 俺だったらexternにするぞ。

79:デフォルトの名無しさん (ワッチョイ 72cc-n0J+)
17/04/08 20:50:02.31 N0c155CY0.net
K&RならC勉強していた女子社員にやったわ
姉貴が蛍光ペンで目茶苦茶にしてくれたからもう要らなかったんけどねw

80: ◆QZaw55cn4c (ワッチョイ beff-rt0y)
17/04/08 21:28:14.31 gcfXcmks0.net
>>71
lib や *.o を単独で配布して,そのヘッダを書くとき(lib/o の中に静的変数がある)ときは,extern はないと困るだろうな,とは思う
extern 不要論を連呼するキチガイがいるらしいから,注意したほうがいい

81:デフォルトの名無しさん (ワッチョイ be14-4Usw)
17/04/08 21:34:09.29 ATd5Gv2i0.net
でも実際extern からアクセスしろってライブラリは見たこと無い
普通関数じゃね?

82:デフォルトの名無しさん (ワッチョイ 72cd-8Vmj)
17/04/08 21:38:17.52 J+fRzcYw0.net
クソライブラリを使うときにexternないと困るな

83: ◆QZaw55cn4c (ワッチョイ beff-rt0y)
17/04/08 21:39:43.39 gcfXcmks0.net
>>80
例えば <cstdio> の FILE *stdout とか
外部のライブラリの中の静的変数へのプロトタイプとして
FILE *stdout;
て書くと多分そのモジュールに stdout が確保されてしまうんじゃないかな?
関数は
int f();
だけで実体がないのだったらプロトタイプだとわかるけれども
変数は実体を伴うのか参照なのかを区別できない気がする
関数だけ提供するライブラリが存在するのは理解できる

84:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/08 21:56:34.32 LBU0hU+r0.net
>>75
つ__cplusplus

85:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/08 23:26:49.13 TFmwEDa6r.net
externの必要性をとうとう理解してしまったQ
それに対し相変わらずコミュ障のもう一人のクソコテ

86:デフォルトの名無しさん (アウアウイー Sa97-lIlP)
17/04/08 23:36:29.56 8P1QJwbCa.net
>>83
#ifdef __cplusplus
#define _static
#define _extstatic extern
namespace {
#else
#define _static static
#define _extstatic static
#endif
_extstatic struct A a[];
_static struct A b[] = {{"1st in b[]", a}, {"2nd in b[]", a+1}};
_static struct A a[] = {{"1st in a[]", b}, {"2nd in a[]", b+1}};
#ifdef __cplusplus
}
#endif
まぁ、確かにこんだけ書けばCでもC++でも無警告でコンパイル通ったけど、
まぁ面倒ですこと(゚д゚)!

87:デフォルトの名無しさん (ワッチョイ 7f8c-7E04)
17/04/08 23:39:18.99 bfo0YVHI0.net
>>85
わざわざc使わなくてもc++だけでよかでしょ?

88:デフォルトの名無しさん (ワッチョイ cf7a-02AM)
17/04/09 00:00:11.10 cP8aqgv30.net
Cでも使いたい人には自分でラッパー作ってくれと言ってるわ

89:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 00:52:09.49 djBIOydUr.net
>>85
>こんだけ書けばCでもC++でも無警告でコンパイル通ったけど
そんな文法違反な糞コードを「ボクのパソコンでは動いたもん」みたいに自慢されても…

90:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 01:02:23.00 djBIOydUr.net
>>77
ひょっとして、もしかするとお前の頭では
「extern」=「外部リンケージ」なのか?

91:片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c)
17/04/09 07:01:35.78 qFsmFYyfd.net
わっしょい、わっしょい

92:片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c)
17/04/09 07:08:55.81 qFsmFYyfd.net
自分の理解できないことを、何でもコミュ症で片付けるやつ、嫌い。

93:片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c)
17/04/09 07:13:22.07 qFsmFYyfd.net
言語障害って日本語があるのに、何で意味不明な略したりするのかな。臆病者だから?

94: ◆QZaw55cn4c (ワッチョイ beff-rt0y)
17/04/09 07:31:21.97 ArlDNXBP0.net
>>84
ところが C には仮定義というものがあって,仮定義しておけば静的変数を共有できるんだよ
だから extern は要らない子!と主張できるんだ
ここは C++ だから,仮定義が出来ない前提で話しているだけだよ
君はまだまだ浅いね

95:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 08:37:34.70 djBIOydUr.net
>>93
ん?extern要らない説の根拠は(翻訳単位に閉じた)仮定義じゃなくて
リンカが頑張ることだったと記憶していたのだが
ひょっとしてもしかすると、アフォ?

96:デフォルトの名無しさん (ワッチョイ 130e-+TA9)
17/04/09 09:10:41.09 A2LIIX7y0.net
仮定義はリンカが頑張って実現してるんだが
リンカのマップ情報とか見たことないの?

97:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 09:37:03.20 djBIOydUr.net
なるほど
仮定義というものが何なのか理解していないのでこういうとんちんかんな発言になるのだな

98:デフォルトの名無しさん (ワッチョイ 130e-+TA9)
17/04/09 10:11:41.88 A2LIIX7y0.net
それはこっちの台詞だyo

99:デフォルトの名無しさん (ワッチョイ cf59-dxaC)
17/04/09 10:30:05.69 elB46Etj0.net
仮定義ってなんだっけ
extern int a; が複数の翻訳単位にあったら勝手にaの実体が1個できるというやつだっけ;
C++には無いの?(驚愕

100: ◆QZaw55cn4c (ワッチョイ bf35-D1KF)
17/04/09 10:53:03.36 Cfl4+wb20.net
>>98
仮定義はリンカにおんぶにだっこしてもらう仕様だよ
extern を書かなくてもいい、というものだ
実体を持たない普通の外部変数と同じように
int evil_global;
とか書くだけでいい、ヘッダに extern int evil_global; と書く必要がなくなる(宣言部分での初期化はできないことに注意)
いやまあ、ちょっと追いきれていないところがあって、まだ俺も浅いのはみとめるが、とりあえず C++ にはないので、みなかったことにしている
議論が続きそうだが俺は参加しないよ

101: ◆QZaw55cn4c (ワッチョイ bf35-D1KF)
17/04/09 10:53:48.84 Cfl4+wb20.net
>>94
仮定義は翻訳単位に閉じたとはいいきれないよ

102:デフォルトの名無しさん (ワッチョイ bf35-D1KF)
17/04/09 11:04:16.30 Cfl4+wb20.net
>>99
訂正するね
誤:実体を持たない普通の外部変数と同じように
正:実体を持たない外部変数であっても
なんか訂正しきれていないきもするが

103:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 17:20:17.02 djBIOydUr.net
>>98
>複数の翻訳単位にあったら勝手にaの実体が1個
それはQの妄想というやつで仮定義とは別
なおISO/ IEC 9899:2011では未定義動作になっているので仮に実体が一個になっても違反ではない

104:デフォルトの名無しさん (ワッチョイ cf59-dxaC)
17/04/09 19:24:59.42 elB46Etj0.net
「仮定義」でググッたらあったわ;
URLリンク(docs.embarcadero.com)
extern、static、初期化のいずれも無しの変数宣言っぽいものが(関数外のスコープで)複数個現れたとき、
C言語規格の方が高度なことをしてくれるのか
(C++では>>102によると未定義動作とのことなので同じ結果になるかどうかは規格外の仕様に拠る。
しかし上の説明だけでは関数宣言にexternを付ける意味がまだわかんね;

105:デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
17/04/09 19:56:25.40 9WDYOgp70.net
>>102
もはや何を言っているのかしどろもどろだな
未定義の動作は何が起きても構わないが、
その内容に依存するコードが違反かどうかもわからないクルクルパーはお気の毒

106:デフォルトの名無しさん (ワッチョイ cf59-dxaC)
17/04/09 20:10:15.00 elB46Etj0.net
いやすまん「規格外の仕様に拠る」はやや誤解して書いてたわ;
下記の通り、未定義動作を含むコードは合法には成り得ず、実行できるかもしれないが、結果は保証されない。(つまり違反
URLリンク(www.c-lang.org)
>未定義の動作に対して,その状況を無視して予測不可能な結果を返してもよい。
>翻訳時又はプログラム実行時に,文書化された,環境に特有な方法で処理してもよい(診断メッセージの発行を伴っても伴わなくてもよい。)。
>さらに(診断メッセージを出力し)翻訳又は実行を中断してもよい。
ここで、診断メッセージ云々とか「文書化された,環境に特有な方法で処理」とは安全に実行を止めることを意味する
Windowsでアプリのクラッシュ時に出てくるダイアログとか、コアダンプとかがそれにあたる

107:デフォルトの名無しさん (ワッチョイ cf59-dxaC)
17/04/09 20:15:29.79 elB46Etj0.net
ていうか最初の疑問に戻るんですが、総合すると、CでもC++でも「extern」 = 「外部リンケージ」、でおkなのでは…
ただ外部リンケージの意味で省略可能だったり、
ANSI Cにおいては「仮定義」に関する仕様が追加されてるから話が複雑化したように見えているだけで、

108:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 20:16:15.29 djBIOydUr.net
>下記の通り、未定義動作を含むコードは合法には成り得ず
何というか、「下記」のどこを縦読みするとそうなるんだか

109:デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
17/04/09 20:18:42.95 9WDYOgp70.net
>>106
追加じゃなく追認な

110:デフォルトの名無しさん (ワッチョイ cf59-dxaC)
17/04/09 20:19:44.66 elB46Etj0.net
>>107
>翻訳時又はプログラム実行時に,文書化された,環境に特有な方法で処理してもよい
つまり翻訳時にビルドエラーで止めても良い

111:デフォルトの名無しさん (ワッチョイ cf59-dxaC)
17/04/09 20:34:41.52 elB46Etj0.net
>>108
互いに正しく適合する「宣言」と「定義」からなるプログラムにとって「仮定義」の概念は不要なのだから、
この場合何を追認したかというと既存のソースコードにおける「extern」の誤用を追認したとしか考えられないのでは…
つまり言語規格の既存の条項が「追認」されたわけではなく、あくまで条項が「追加」されたんである
(多分「追認」なんて定義もされていないだろうし、

112:デフォルトの名無しさん (ワッチョイ 722b-Crua)
17/04/09 20:52:23.27 k8qrPdcw0.net
>>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

113:デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
17/04/09 21:03:07.96 9WDYOgp70.net
>>110
少なくとも「externの誤用」ではない
externと書かなかった場合のことについてだ

114:デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
17/04/09 21:04:18.72 9WDYOgp70.net
今となっては忸怩たる思いだが
俺は「追認された」張本人の1人であって

115:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 21:32:38.73 djBIOydUr.net
>>109
なるほど理解した
まさか>>102から>>105にかけて『違反』という言葉の意味ををすり替えられていたとは気付かなかった失礼

116:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 21:52:43.91 djBIOydUr.net
>>110
>「仮定義」の概念は不要なのだから
仮定義が無いと通らない例が>>75で出ているのに
不要である理由の説明も無しにいきなり結論付けられても…

117:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/09 22:01:05.39 djBIOydUr.net
>103
そのサイトのANSI Cの説明は多分ウソだぞ
同じ内容なはずのISO Cはそんな定義じゃないから

118:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/10 14:43:46.26 DheowmrF0.net
おまえら規格票くらい買うか、せめてドラフトくらい用意しろや
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」とか言っちゃってるサイトは眉に唾してかかれ

119:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/10 14:44:01.60 DheowmrF0.net
 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.

120:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/10 14:44:21.17 DheowmrF0.net
6.9.2 外部オブジェクト定義
意味規則 オブジェクトの識別子の宣言がファイル有効範囲及び初期化子をもつ場合,その宣言を識別子の外部定義という。
ファイル有効範囲のオブジェクトの識別子を,初期化子を使わず,かつ,記憶域クラス指定子なしか又は記憶域クラス指定子static で宣言する場合,そのオブジェクトの識別子の宣言を仮定義(tentativedefinition)という。
翻訳単位が,ある識別子に対する仮定義を一つ以上含み,かつその識別子に対する外部定義を含まない場合,その翻訳単位に,翻訳単位の終わりの時点での合成型,及び0 に等しい初期化子をもったその識別子のファイル有効範囲の宣言がある場合と同じ規則で動作する。
オブジェクトに対する識別子の宣言が仮定義であり,内部結合をもつ場合,その宣言の型は不完全型であってはならない。

121:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/10 14:45:14.16 DheowmrF0.net
 例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 がセットされる。

122:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/10 18:45:17.26 srG0I8DXr.net
N1570のリンクを貼ったら、真実を知った>>100が傷ついちゃうかも知れないと思って遠慮してた

123:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/10 23:59:41.82 srG0I8DXr.net
とりあえずC++のリンケージ仕様でも投下しとくか
URLリンク(www.open-std.org)
ここのN4660(C++17 DIS)の6.5節の段落3~4あたりだな

124:デフォルトの名無しさん (ワッチョイ 138f-+TA9)
17/04/11 15:06:41.62 xAQ0kPvC0.net
パスいるやん

125:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/11 17:53:37.33 gmpvjUS3r.net
まじか
じゃあ同じ内容のN4659で

126: ◆QZaw55cn4c (ワッチョイ beff-rt0y)
17/04/12 19:45:40.04 r8mKYRyu0.net
>>122
いや,だからC++の話だったら仮定義はない,って >>99 で書いたつもりだが,
C++ のリンクを貼ってなにを言おうとしているの?

127:デフォルトの名無しさん (オッペケ Sr57-GJ90)
17/04/12 22:5


128:2:37.49 ID:hzellBg9r.net



129:デフォルトの名無しさん (ワッチョイ db57-EaKP)
17/04/13 12:41:59.49 NIQ3hjXd0.net
んだね

130:デフォルトの名無しさん (ワッチョイ eb00-AM0K)
17/04/13 17:14:46.56 IqLxmvNO0.net
moduleが標準入りするのはいつごろよ?ついでにD言語のversionとaliasもパクって完全体になってほしいね

131:デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
17/04/13 18:41:48.04 RdwWAERL0.net
それよりネットワーク関連を標準化しろ
この際asioでも許容

132:デフォルトの名無しさん (ワッチョイ 3b32-Lcy7)
17/04/13 21:28:48.50 n9EAyVre0.net
asioとhttp系の何かつけてくれ

133:デフォルトの名無しさん (ワッチョイ eb86-HE/W)
17/04/15 11:47:11.44 BNJEkz/Q0.net
>>129-130
ネットワークライブラリを作っております
遊んでみてください、宣伝失礼しました。
URLリンク(github.com)

134:デフォルトの名無しさん (ササクッテロル Sp6f-cQmk)
17/04/15 11:52:21.06 0ry10bQQp.net
標準で入ってることが重要なんじゃないかなあ…

135:デフォルトの名無しさん (ワッチョイ 1f6b-HE/W)
17/04/15 11:56:11.76 JwQS3cI30.net
炊飯器用の小さいネットワークライブラリも必要になるんじゃねえの

136:デフォルトの名無しさん (ワッチョイ 0f1f-V7Gz)
17/04/15 12:21:35.22 QXvRHshA0.net
漁師さん用も頼む

137:デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
17/04/15 14:16:17.69 /RNhb41k0.net
外部ライブラリっていうだけでハードル高くなるからな
仕事で使いづらいのはもちろんとしてOSSでも使用者に各ライブラリを掻き集めてもらわないといけなくなるから最小限にしたい

138:デフォルトの名無しさん (ワッチョイ 1fb2-EaKP)
17/04/15 21:37:48.57 53BEnEdf0.net
論理積で空集合になったからといって
じゃあ論理和にしろと? 頭悪すぎだろ

139:デフォルトの名無しさん (ワッチョイ eb59-0/8P)
17/04/15 22:25:04.54 D67U9VSC0.net
静的型付け言語でオブジェクト指向すると
基底クラスにメソッドが集まっていく…

140:デフォルトの名無しさん (ワッチョイ efa6-HE/W)
17/04/15 22:33:53.11 uwyLFIA10.net
それはよくない兆候だよね

141:デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
17/04/15 23:01:12.27 /RNhb41k0.net
何故テンプレートを使わないのか

142:デフォルトの名無しさん (ワッチョイ eb59-0/8P)
17/04/16 01:51:56.03 M1nx5OGg0.net
基底クラスにメソッドが集まっていくのは仕方が無いにしても、
公開する相手別にインターフェースを分けて抽象クラスの多重継承でもしておけば
大きな混乱は避けられる
希ガス

143:デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
17/04/16 03:21:47.75 9vBuyRLK0.net
仕方ないか?
そういう場合大抵は派生先のあのクラスとあのクラスでこれ使うから基底にいれとこうみたいになってis aじゃなくなってる気がする

144:デフォルトの名無しさん (ワッチョイ 3b0d-T+tu)
17/04/16 10:05:38.55 P5/zt8YK0.net
俺も>>141に一票かな。
基底クラスに集まって来るような関数群は、共通に使うという一点に於いてのみ意味があることが多いんだよね。
と、すると、大抵別クラスとして分離可能になるってケースが多い気が。
つまり、実はhas-aが妥当で、それどころかUMLで言うところの依存関係だけで問題ない事が多いという。

145:デフォルトの名無しさん (ワッチョイ bbf4-aC3X)
17/04/16 13:02:22.02 FhXvPItE0.net
dynamic_castは悪という間違った考え方が基底に余計なメンバ関数を実装させる原因

146:デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
17/04/16 13:15:07.28 cLuVKvb50.net
dynamic_castが悪いのではなくdynamic_cast使いまくるようなら設計に問題があるのではないかという話なのでは

147:デフォルトの名無しさん (ワッチョイ 4b3c-yJ/5)
17/04/16 14:09:06.37 1LAAxzhm0.net
おっと、Javaを悪く言うのはそこまでだ

148:デフォルトの名無しさん (オッペケ Sr6f-xkGs)
17/04/16 14:12:39.55 kL6yOSUfr.net
144がアスペなのは間違い無い

149:デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
17/04/16 14:49:30.10 9vBuyRLK0.net
144を理解出来ない146が…

150:デフォルトの名無しさん (ワッチョイ eb59-0/8P)
17/04/16 14:53:55.66 M1nx5OGg0.net
知らね
ゼロから設計するならともかく、すでに出来上がった構造に仕様追加がなされた場合、
基底クラスにメソッドを追加する流れになりがち
かつdynamic_castはある意味オブジェクト指向的解決手段と言えるかもしれないが、
静的型付けという枠組み(>137)から逸脱する

151:デフォルトの名無しさん (ワッチョイ 1fcc-35Q+)
17/04/16 15:31:42.38 Jwa8aGsr0.net
dynamic_cast と reinterpret_cast が本来の意味と逆だよな

152:デフォルトの名無しさん (ワッチョイ bbf4-aC3X)
17/04/16 22:20:05.54 FhXvPItE0.net
複数インターフェース継承してdynamic_castすればいいところを、基底で取り敢えず全インターフェース重ねてなにもしない実装を定義するみたいなことが多すぎる。

153:デフォルトの名無しさん (オッペケ Sr6f-xkGs)
17/04/16 22:47:27.74 kL6yOSUfr.net
>dynamic_cast と reinterpret_cast が本来の意味と逆だよな
訳:ボクは言語障害です

154:デフォルトの名無しさん (ワッチョイ 9f78-T+tu)
17/04/17 02:47:11.79 /ZxvtgP60.net
>>150
いや、それもなんかおかしいだろ。

155:デフォルトの名無しさん (ワッチョイ 6b3c-cQmk)
17/04/17 03:21:23.30 GWeDXk7n0.net
抽象から具体へのキャストって何かもやもやする
SOLID原則のDIPに反するんじゃないかって気もするし

156:デフォルトの名無しさん (ワッチョイ eb92-D+C1)
17/04/17 07:06:11.59 D/VW2xRY0.net
昔風の継承モデルは最近使わなくなったなあ
テンプレートの方が融通性高い

157:デフォルトの名無しさん (ワッチョイ 1fcc-35Q+)
17/04/17 07:43:02.51 H8Au7WAd0.net
は?バカじゃねぇの

158:デフォルトの名無しさん (ワッチョイ 9fc3-hp0W)
17/04/17 07:48:02.60 4nIA4vL50.net
はい

159:デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
17/04/17 08:36:25.34 R62eo4r30.net
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);
}
みたいな感じ

160:デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
17/04/17 08:50:40.08 bqYXNS3A0.net
非メンバ関数にできるものはvariant使った方がいいなって感じになってきた

161:デフォルトの名無しさん (スップ Sd3f-a7Ro)
17/04/17 08:54:59.22 OwDSFehNd.net
>>157
なんかやだ

162:デフォルトの名無しさん (ワッチョイ 3b37-T+tu)
17/04/17 08:55:54.12 5RBrgFiu0.net
>>157
いや、それdynamic_castと寸分違わず同じだから…
gotoをdo{}while()にするのと同じレベルだと思う。

163:デフォルトの名無しさん (スプッッ Sd3f-lyFy)
17/04/17 09:07:38.99 qMcNcEsbd.net
RTTIはオプションで切っておきたい

164:デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
17/04/17 09:13:50.45 R62eo4r30.net
>>160
継承関係になくていいというところが違うし(結構大事だと思う)、dynamic_castはダイナミックリンクするライブラリと組み合わせると面倒くさいからなるべく使いたくないんだよね。

165:デフォルトの名無しさん (スップ Sd3f-a7Ro)
17/04/17 10:32:14.53 OwDSFehNd.net
依存関係の強さは変わらんよね

166:デフォルトの名無しさん (ワッチョイ 1f6b-HE/W)
17/04/17 12:22:18.70 PEkyQsSL0.net
その「強さ」を具体的に数値化できればな

167:デフォルトの名無しさん (ワッチョイ 2bf4-EaKP)
17/04/17 14:44:09.70 YxhJnxLO


168:0.net



169:デフォルトの名無しさん (ワッチョイ 2bf4-EaKP)
17/04/17 14:46:29.60 YxhJnxLO0.net
>>162
継承を使わないインターフェイスは確かに欲しいが
後半が何を言っているのか好意的に読んでもわからんぞ

170:デフォルトの名無しさん (スップ Sd3f-a7Ro)
17/04/17 16:34:39.13 OwDSFehNd.net
QueryInterfaceいやだ

171:デフォルトの名無しさん (ワッチョイ eb00-AM0K)
17/04/17 16:58:00.17 rD3LHvJv0.net
COM設計したやつって基地外だよな

172:デフォルトの名無しさん (ワッチョイ 2bf4-EaKP)
17/04/17 18:04:25.63 YxhJnxLO0.net
APIが単一空間に際限なく増えることへの危機感から
何らか対策を講じるとして、割とまともな答えだと思う

173:デフォルトの名無しさん (ワッチョイ 2bf4-EaKP)
17/04/17 18:05:14.09 YxhJnxLO0.net
GUIDの扱い方が変態的なのがちょっとイヤだけどね

174:デフォルトの名無しさん (ワッチョイ eb59-0/8P)
17/04/17 22:27:32.59 ZfEceRxS0.net
やっぱこれからはAPIが呼び出し元のコードを生成すべき

175:デフォルトの名無しさん (ブーイモ MMaf-YOru)
17/04/17 22:40:09.29 KscfyyhaM.net
呼び出し元のコードは誰が呼び出すんだ

176:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd3f-L+dC)
17/04/17 22:43:06.49 dVaQYL/0d.net
オバマ元大統領が電話で呼び出してくれるだろう。

177:デフォルトの名無しさん (ワッチョイ 6b3c-cQmk)
17/04/18 00:19:12.10 3dyURfCV0.net
そうなんだ、すごいね

178:デフォルトの名無しさん (ワッチョイ 1fcc-35Q+)
17/04/18 04:24:36.93 sGHQhIiJ0.net
         _人人人人人人人人人人人人人人人_
        >   そうなんだ、すごいね!      <
       ´ ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
            __、、=--、、         __
           /    ・ ゙!       /・   `ヽ
           | ・   __,ノ       (_    ・ |
           ヽ、 (三,、,         _)    /
            /ー-=-i''       (____,,,.ノ
            |__,,/          |__ゝ
             〉  )          (  )

179:デフォルトの名無しさん (ワッチョイ db65-EaKP)
17/04/18 14:33:19.90 opmIphTi0.net
>>171
APIが関数ではなくテンプレートであるべきということか?

180:ich1 (アウアウオー Sabf-d3ae)
17/04/18 14:56:55.08 ZJShoz7Oa.net
URLリンク(goo.gl)
これは嘘でしょ?本当?

181:デフォルトの名無しさん (ワッチョイ db65-EaKP)
17/04/18 15:43:43.41 opmIphTi0.net
>>177
スレ違い「生理前の肌荒れナントカ」

182:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 00:24:26.42 37YtuUfA0.net
テンプレートに演算子を与えたいのだけど、マクロでやらないとダメよね?
maxとかminとか。
走査するところは共通で、> か < かが違うだけなのだけど。

183:デフォルトの名無しさん (ササクッテロレ Sp6f-cQmk)
17/04/19 00:50:34.43 5KqdfKh3p.net
比較用のファンクタをテンプレートパラメータにすれば良いだけじゃないの
STLのmapみたいな感じで

184:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 01:36:15.55 37YtuUfA0.net
>>180
なるほどそれなら確かに書けるね。
しかし、ちゃんとインラインにしてくれるのかすごく心配だ。

185:デフォルトの名無しさん (ワッチョイ efa6-HE/W)
17/04/19 06:48:25.24 1gRwKhTB0.net
よく話が通じるな

186:デフォルトの名無しさん (ワッチョイ 1fcc-35Q+)
17/04/19 07:02:34.69 pPK7kNhi0.net
トーシローの考えることなど手に取るように解るだろ

187:デフォルトの名無しさん (ワッチョイ 9fc3-hp0W)
17/04/19 07:45:25.15 CHQbSNlI0.net
ファンクタってなに?

188:デフォルトの名無しさん (ワッチョイ 2b51-EaKP)
17/04/19 07:58:24.39 NVOSG7Tn0.net
メンバoperator()を持つクラスのインスタンス

189:デフォルトの名無しさん (オッペケ Sr6f-xkGs)
17/04/19 08:01:07.84 2ep/ROmVr.net
というのが185の妄想

190:デフォルトの名無しさん (ドコグロ MMbf-RLAq)
17/04/19 08:10:11.76 CJSzniGcM.net
>>181
なぜ試さない?

191:デフォルトの名無しさん (ワッチョイ 2b51-EaKP)
17/04/19 08:29:27.36 NVOSG7Tn0.net
という妄想を朝から垂れ流す186

192:デフォルトの名無しさん (ワッチョイ 0b6a-T+tu)
17/04/19 09:06:44.93 oJjBFOoS0.net
>>181
templateとファンクタはインライン展開がかなり期待できる手法。

193:デフォルトの名無しさん (ワッチョイ 1f72-8aNn)
17/04/19 10:21:17.52 TnomPWtQ0.net
#include "A.h"

class A;
の違いって何でしょうか?
どのように使い分けるのですか?

194:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 10:26:39.57 37YtuUfA0.net
>>187,189
確かに以前違うところで思いっきりインラインされているのを見たから、
実際にはされるのだろうね。
ただ、C++のそういった方向への進化はちょっと嫌いだね。
今現在マクロで書いてるからテンプレートが改行無しのコードになってる。
使い勝手は悪いけど、確実に動くし、インラインだ。
俺の要求としては「テンプレートに演算子を書かせてくれ」これだけだ。
さてC++は何故かこれができない。
とは言え珍しいケースでもないはずだから、実際にはやり方があるはず。
そして聞いてみると、型を作る為にファンクタを作って差し込めばいいと言う。
わざわざ型を作ってコンパイラがインライン化するのを期待しろ?
そりゃ動作だけなら同じだが、ソースが余計に見にくくなる。
今の改行無しのコードと、どっちがマシかと言えば、min/max位なら前者だよ。
だからこれなら今回は見送りだ。
とは言え、巨大なテンプレートになってブレークポインタがないと辛い状況になると、
これまではコピペしてデバッグして上書き、というのをやってた。
これは無駄だなあと思っていたので、
とにかくやり方があるのを教えてもらったのはありがたい。
ただ、この解を一般的に受け付けるC++のコミュニティのノリは俺はちょっと嫌い。
重ねて言うが、普通に演算子書かせてくれよ、と思う。

195:デフォルトの名無しさん (スプッッ Sd3f-lyFy)
17/04/19 10:30:32.85 cmg5eKJnd.net
マクロなんてアホみたいな機能使ってる奴がいまだにいたとは

196:デフォルトの名無しさん (スップ Sd3f-a7Ro)
17/04/19 10:38:16.72 xWugx3VWd.net
ああ、std::plus とかラムダ式じゃなくて + を指定したいって意味か

197:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 11:18:27.22 37YtuUfA0.net
おー、そういうのがあるんだね。
なるほどそれなら std::rel_ops::operator> を使うべきなのかな?
これが標準なら慣れるしかないけど、何だかなー。
呼び出し時に somefunc<double,std::rel_ops::operator>>
だとminなのかmaxなのか分からない。
今は関数名もsome_max, some_minとかに出来てるんだよね。

198:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 11:29:39.03 37YtuUfA0.net
ちなみに現状はこんなコード
#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

199:デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
17/04/19 12:34:12.22 q88wQIwA0.net
std::max_element
お前どこかのスレでbindが遅いとか、質問に答えた相手をアホ呼ばわりしたやつじゃね?

200:デフォルトの名無しさん (ドコグロ MMbf-RLAq)
17/04/19 12:41:12.49 CJSzniGcM.net
>>192
爺なんだろ
関わりあるならともかくないなら放置でいいよ
下手に絡むとマクロの素晴らしさとかをとうとうと語りそうだし

201:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 12:46:19.25 37YtuUfA0.net
>>196
いや、イテレータが欲しい訳じゃない。
上記の例はそれだが、実際はもっと複雑で、最初に言ったように、
走査部分は全く同じで演算子だけ異なる場合、どうするか。
で、どのレスのこと?

202:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 12:50:36.22 37YtuUfA0.net
ちなみにマクロは糞だと思うぞ。
単純置換くらいならいいが、それ以上は訳が分からなくなる。
ただ、演算子を置換したい為にファンクタにしてテンプレートに突っ込むのも同様に糞だと思うぞ。
見て分かりやすいものではないだろ。

203:デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
17/04/19 13:00:01.75 q88wQIwA0.net
>>199
お前は中でファンクターを渡す好きな名前のラッパー関数を定義するという発想もないの?
まさか関数呼び出しコストガーとか言わないよね?

204:デフォルトの名無しさん (ワッチョイ ef14-AM0K)
17/04/19 13:04:45.97 Z8YDH0nj0.net
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]) );
書いといてなんだが、見やすい見にくいの問題なら個人の感想なので好きなようにどうぞとしか

205:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 13:19:37.56 37YtuUfA0.net
>>201
ああなるほど、サンクス。そうすれば外側に名前が見えるのね。
個人的にはちょっと技巧的すぎて嫌いなコードだが、
正直なところ、コピペしてデバッグしてコピペで戻すのもうんざりしてたので、
徐々に慣らしながら使わせてもらうことにするよ。
C++での割と標準的な解決法ってこれなんだよね?
みんながやってるのなら俺も慣れるしかない。

206:デフォルトの名無しさん (ワッチョイ 0b75-93S+)
17/04/19 13:32:04.24 q88wQIwA0.net
>>202
>>201 はまったく標準的ではない。
そんな書き方させる標準ライブラリが一つでもあるか?
URLリンク(ideone.com)
これだけの話(わざとmin_elementは使わずに書いてる)
std::max_elementと関数名は勝手に置き換えろ

207:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 14:06:14.80 37YtuUfA0.net
>>203
いやだからイテレータが欲しいんじゃないんだよ。
それって話が余計に膨らんじゃうだろ。
今既に走査するコードはあって、それをテンプレートで置き換えようとしている。
呼んだら結果が返ってくる、それだけの関数なんだよ。
そのマクロを撲滅しようとしている。
イテレータだと外側コンテナに色々付け足しが必要になる。
それをやりたい訳じゃない。
最初から全て標準コンテナを使え、というのならその通りだが、それは別件だ。
今は生配列なんだよ。
とりあえず「型」としてファンクタなり構造体をテンプレートに渡し、
中でそれを使う、というのが一般的で良いんだよな?
それとは別に、走査する部分はイテレータで統一し、
std::max_element等にそれを呼ばせるというのも一つのやり方だよ。
ただこれは今やりたい話じゃない。
つか、イテレータイテレータ言ってるのはJavaだと思っていたが、
C++もイテレータ全盛の世界なのか?

208:デフォルトの名無しさん (ワッチョイ 0b75-93S+)
17/04/19 14:19:56.81 q88wQIwA0.net
>>204
int a[8]={4,-2,4,56,7,8,5,3};
が生配列に見えないの?
const T* a,size_t s
が生ポインタと要素数って解らなかった?
C++どころかC言語すら解ってないんじゃないの?
お前の頭には応用という言葉が無いの?
URLリンク(ideone.com)

209:デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
17/04/19 14:25:44.80 15mBJgd3M.net
イテレータってお前の言ってる走査のシンタックスシュガーやぞ

210:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 14:36:42.93 37YtuUfA0.net
>>205
あーなるほど分かったわ。確かにこれの方が直感的で良いわ。
事実として俺はテンプレートに慣れてないからね。
まあとにかくありがとう。

211:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 16:00:45.80 37YtuUfA0.net
すまんが次の質問。
テンプレート内部で型を決めうちしたいのだが、この書き方ってある?
例えば内部で高精度で演算したい時、引数型が
引数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 を何とかして潰せれば呼び出し時にも書かなくて良くなり、全てすっきりするのだが。

212:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 16:07:17.99 37YtuUfA0.net
すまん、ググったら条件分岐がヒットした。
というか2段重ねれば良いだけか?という気がしてきた。
あまり自信はないが。

213:デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
17/04/19 16:15:43.91 15mBJgd3M.net
type_traits使う

214:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 16:30:01.80 37YtuUfA0.net
>>210
> type_traits
見た目それようだが、何故かサイズが取れないのね。
ただどのみち俺の環境(VS2008)では使えないようだ。
とはいえ、今回の質問はどうやらラップすれば終わりのようだ。
お騒がせして申し訳ない。

215:デフォルトの名無しさん (ワッチョイ 0b75-93S+)
17/04/19 16:39:33.18 q88wQIwA0.net
>>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でも使える

216:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 16:54:59.37 37YtuUfA0.net
>>212
ありがとう。まさに今その1をやったところ。
地味だがこれが一番分かりやすい。
ラップしまくるのは気になるが、C++の世界だとコンパイラが最適化してくれることを期待するんだよな?
traitは後日試してみるわ。本来はそっちの方が本筋なのだろうし。
今回は精度最高型で演算するだけだから規則は簡単。
char, short, int -> int64
float, double -> double
だね。

217:デフォルトの名無しさん (ワッチョイ 0f92-D+C1)
17/04/19 17:05:51.26 zKKKUYsP0.net
>>209
俺もパッと思いつくのはenable_if使って2段にすることだな
こんな風に
URLリンク(ideone.com)
もっとスマートなやりかたがあったら教えて欲しい

218:デフォルトの名無しさん (ワッチョイ 6b3c-V7Gz)
17/04/19 19:31:59.93 suSDkWlT0.net
>>213
>コンパイラが最適化してくれることを期待するんだよな?
まず試せw
VCで逆アセンブル見るなり
URLリンク(gcc.godbolt.org)
↑これで見るなり
厳密には知らんが、関数テンプレートは大体inlineつけなくても最適化でインライン展開の対象になる

219:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 19:52:27.59 37YtuUfA0.net
>>215
まあそうなんだけど、今回については
・仮に遅くなったとしてもやる
・最終的にはアセンブラに差し替える
という、主に編集上の都合なのでどの道やるんだわ。
最悪、手でコピペして展開すれば直結出来ると分かっているから、その辺は安心。
テンプレート慣れしてないから、いちいちラップするのが気持ち悪いが、
そんなもんだというのなら慣れるしかない。
ただやっぱ、見た目直感的なコードではなくなるのが残念なところ。
varにしたら自動的にテンプレートになって、
文句がある場合のみ手動で特殊化が一番助かるんだが。

220:デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
17/04/19 21:04:11.42 15mBJgd3M.net
>>216
>varにしたら自動的にテンプレートになって、
>文句がある場合のみ手動で特殊化が一番助かるんだが。
いやそれがtraitsなんだけど…

221:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 21:47:13.23 37YtuUfA0.net
>>217
いやあれ属性でやろうとしてるでしょ。
普通に型名で書いた方が楽だよね。特殊化みたいに。
変に汎用化させようとして、余計に分かりにくくなってるよ。
なんつーか、C++ってそっちの傾向あるでしょ。変に技巧に凝りすぎというか。
テンプレートにしても、編集上の努力であって、新機能追加やバグ取りにはならないし。
努力の方向を間違えたら完全に空回りてしまう。
varで書かせてくれよとマジで思うよ。

222:デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
17/04/19 22:18:24.03 15mBJgd3M.net
varと書けるようにするとなぜ新機能開発やバグ取りにできるの??
templateで何ができないと言ってるのかまじで意味わからん
templateをマクロと同じように使おうとしかしてないから編集上の機能に見えるだけでしょ?
ランタイムのオーバーヘッドをなくすために使うんだよ普通は
てか属性でやろうとしてるってなんだよ、現行C++にattributeなんてねーよクソカス
高精度型にキャストしたいならtraitsとdispatch用の関数書くだけ

223:デフォルトの名無しさん (ワッチョイ 6b3c-V7Gz)
17/04/19 22:29:39.45 suSDkWlT0.net
>>218
言いたいことはわからんでもないけどな
他人はどうか知らんが、自分はSTLやboostのコードを分かりやすいとは全く思わん
ヘッダで公開してるから(そうせざるを得ないんだが)アレを全員目指すべきと勘違いしてる人はいるかもしれんw
言ってしまえば、テンプレートで設計の幅広げたり高速化したり、ってのはあくまで副産物的に生まれたトリックに過ぎんし
そういうライブラリはきちんとドキュメントが存在しないと使い物にならん(あれば超便利なんだが)
そもそもほぼC++しかやってないのでvarが何なのかよーわからんが。
関数型言語みたいな記述力を求めてんのかね?

224:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 22:39:24.29 37YtuUfA0.net
>>219
templateを使わずに同じ事を実現出来る環境なら、
その時間を新機能追加やバグ取りに使えるって事だよ。
実際、JavaScriptとかはそうなんだよ。
ただし、あっちには別の問題があるのだけどね。

225:デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
17/04/19 22:50:14.02 q88wQIwA0.net
でたJavascript
やっぱりstd::bindは高機能すぎるからオーバーヘッドが有るとか言ってた奴か。

226:デフォルトの名無しさん (ワッチョイ bb1f-ZHy1)
17/04/19 22:52:18.87 1eYI3Ipd0.net
あーあいつか
あの時も意味不明なこといいまくってたな…
もうC++は諦めろ

227:デフォルトの名無しさん (ワッチョイ 6b3c-V7Gz)
17/04/19 22:54:45.80 suSDkWlT0.net
>やっぱりstd::bindは高機能すぎるからオーバーヘッドが有るとか言ってた奴か
これがマジなら
>ID:37YtuUfA0
マジで実測する癖つけた方がいいよ・・・・・w
速度に関して憶測でモノ言うのは話にならん・・・・

228:デフォルトの名無しさん (ササクッテロレ Sp6f-cQmk)
17/04/19 22:56:23.35 5KqdfKh3p.net
常軌を逸してる
触ってしまってすみませんでした

229:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 22:57:53.67 37YtuUfA0.net
>>220
varは何でも突っ込める。(というより型がない)
理論的には、全ての変数を「別々に」テンプレート化しているのと同じ事になる。
だから、理論的にJavaScriptにはテンプレートが必要ない。
(あるけどあれはHTML生成用の別物であって、C++のテンプレートとは違う)
例えば、maxがあったとして、
C++:
double max (double x, double y){ return (x>y)? x : y;}
JavaScript
function max(x,y){ return (x>y)? x : y;}
なんだけど、これはC++的には
template <typename Tx, typename Ty, typename Tr> Tr max(Tx x, Ty y){ return (x>y)? x : y;}
と同じ意味になる。
こんなデタラメで良いのか?と思うけど、
実際、コードの大半はデタラメで良いから、
常に完全フルチューンマニュアル走行のC++はオーバースペックなんだよね。
手抜きで良いところはもっと手抜きしたい。
テンプレートは道路整備に近いから、ライブラリを作っている人はガンガン使うべきだけど、
それぞれの単独アプリで濫用すると空回り感が酷い。
とは言え、それを理由にデタラメにやってきたからいよいよ見にくくなってリファクタしてるんだけど。
ちなみに関数型(キリッの連中は多分勘違いしている。関数型が既述能力が特に高いわけではない。
というか、C++で出来ない既述は基本的にないと思う。
ただし、書きやすいかと言われれば、全く酷いけど、C++のコミュニティってかなり厨二で、
そういうのもC++の魅力だ!と言いきっている感がある。
いや勘弁してください、ってことで。

230:デフォルトの名無しさん (ワッチョイ 6bc8-HE/W)
17/04/19 23:05:48.45 37YtuUfA0.net
>>224
コンパイラが最適化してくれるからいい、のではなくて、
コンパイラが最適化しなくても速いコードを最初から書こうとしているって事だよ。
ただしC++ではそれが出来ないが、
そもそもコンパイラが最適化してくれるから問題ないってノリでしょ。
ここら辺はスタイルの違いだと思うよ。

231:デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
17/04/19 23:07:23.43 q88wQIwA0.net
>>224
俺も憶測で決めつけてるけどね。
でもこの書きっぷりと応用性のなさ。Javascriptときたからもうあいつにしか見えない。

232:デフォルトの名無しさん (ワッチョイ eb7a-3MbB)
17/04/19 23:11:15.73 cDK+jlin0.net
何故気に入らないのにC++を使おうとするんだ
RustとかSwiftのような新しい言語の方がきれいに安全に書けるぞ

233:デフォルトの名無しさん (ワンミングク MM3f-ZHy1)
17/04/19 23:12:32.75 9cOcPQsOM.net
template <typename T> T max(T a, T b) { return x > y ? x : y; }
だろ?馬鹿?
しかもjavascriptのvariant型なんてc++でいうとこのvoid*型だろ?
使うたびに内部ではdowncastしてるはずなのにそのオーバーヘッドコストは気にならないのか?

234:デフォルトの名無しさん (ワッチョイ bb1f-ZHy1)
17/04/19 23:14:03.78 1eYI3Ipd0.net
>>229
RustもSwiftも強い静的型付けだから、型システムがわかってないこいつにはC++同様使えない

235:デフォルトの名無しさん (ワッチョイ efa6-HE/W)
17/04/19 23:28:44.31 1gRwKhTB0.net
テンプレートだと指が勝手にユニバーサル参照にしてしまう

236:デフォルトの名無しさん (オッペケ Sr6f-xkGs)
17/04/19 23:53:27.98 5Pu3YB5qr.net
>>219
>現行C++にattributeなんてねーよ
何故か規格を読まない奴ほど自信満々に嘘をつく法則

237:デフォルトの名無しさん (オッペケ Sr23-bEgw)
17/04/20 00:12:38.85 tHs+CIU3r.net
>template <typename T> T max(T a, T b) { return x > y ? x : y; }
>だろ?馬鹿?
>>226の説明が理解できなかった自分の方が馬鹿だった
という事実に230が気付くことは無いだろう

238:デフォルトの名無しさん (ワントンキン MMfa-kezb)
17/04/20 00:17:15.41 4toBdd3vM.net
いやお前だよ…

239:デフォルトの名無しさん (ワッチョイ 1f8f-AhUp)
17/04/20 05:55:38.33 dzDslOc/0.net
js訛りのC++か
気がつくとぼっちだぜ
んなキモいことしてっと

240:デフォルトの名無しさん (ワッチョイ 871f-HDOw)
17/04/20 06:46:57.40 4gdppVlz0.net
そういやC++のきれいなコードあんまり見たことない

241:デフォルトの名無しさん (スップ Sd4a-Vs57)
17/04/20 12:06:51.73 nHxDShTLd.net
俺のコードはスカスカで綺麗だぜ!

242: ̄ ̄\| ̄ ̄ ̄ ̄ ̄ ̄ ̄ (ワッチョイ 8acc-C5/3)
17/04/20 16:31:13.15 dSLwtaqZ0.net
         ,,-―--、
        |:::::::::::::;;;ノ
        |::::::::::( 」
        ノノノ ヽ_l
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬    |

243:デフォルトの名無しさん (ワッチョイ de92-UbXF)
17/04/20 16:39:26.78 pGeg/NAi0.net
俺のコードにはファウンデーションを丹念に塗ってある

244:デフォルトの名無しさん (オッペケ Sr23-bEgw)
17/04/20 21:34:46.16 iTkbXITvr.net
>>232
ユニバーサル参照にするとどういう制限が発生するのか分かった上でやっているのか?

245:デフォルトの名無しさん (ワッチョイ 87f4-bQlo)
17/04/20 21:45:04.01 OBF/5/VT0.net
>>240
MFCとか綺麗だよねw

246:デフォルトの名無しさん (ワッチョイ 06a6-HDOw)
17/04/20 22:40:39.82 16AwdhdC0.net
>>241
はて?制限・・・そんなのあったっけ?
(あわててEMC++をめくりながら)

247:デフォルトの名無しさん (オッペケ Sr23-bEgw)
17/04/21 14:01:58.43 jq02h6/Cr.net
Effective Modern C++のItem 30を読まなくても幾つかは日常的に気付きそうなものだが
struct A { constexpr static int N = 1'000; };
f_pass_by_value(A::N); // OK
f_pass_by_universal_ref(A::N); // NG

248:デフォルトの名無しさん (ワッチョイ a375-OSeR)
17/04/21 14:33:26.68 SD7KIjS10.net
>>244
それ -std=c++1z で通るのな。規格変わったん?

249:デフォルトの名無しさん (オッペケ Sr23-bEgw)
17/04/21 14:40:59.59 jq02h6/Cr.net
>>245
変わる予定
流石にC++14の言語仕様はクソだった
N4659 D.1山椒

250:デフォルトの名無しさん (オッペケ Sr23-bEgw)
17/04/21 14:43:15.61 jq02h6/Cr.net
だがこれはC++17でも通らない
struct A { int b : 2; };
f_pass_by_ref( A{}.b );

251:デフォルトの名無しさん (スップ Sd4a-Vs57)
17/04/21 14:47:58.15 uAFMuOM4d.net
クソザコなので日常的には何も気付かない

252:デフォルトの名無しさん (ワッチョイ 0b59-C4NQ)
17/04/23 11:36:55.65 onWybp6E0.net
質問
std::map<key_t, int>にkey_t型のブツの個数を格納したいのですが、どう書くのがSTL的に推奨?
仮に
typedef std::map<key_t, value_t> dic_t;
dic_t dic;
key_t key;
であるとして、
(1) std::pair<dic_t::iterator, bool> result = dic.insert(dic_t::value_type(key, 1));
  if (!result.second) { result.first->second++; }
(2) dic_t::iterator it = dic.find(key);
  if (it == dic.end()) { dic[key] = 1; } else { it->second++; }
(3) その他
みたいな?

253:デフォルトの名無しさん (ワッチョイ 0b59-C4NQ)
17/04/23 11:40:30.73 onWybp6E0.net
補足>>249
>ブツの個数を格納したい
というのは、keyの出現も個数もわからない状態から、key出現毎に数えていきたいという意味です

254:デフォルトの名無しさん (ワッチョイ 2756-2VNN)
17/04/23 11:58:50.37 VmCxZvh+0.net
std::map::size で取得

255:デフォルトの名無しさん
17/04/23 12:31:44.54 XHzgUmp00.net
>>249
++dic[key];

256:デフォルトの名無しさん
17/04/23 13:01:20.45 E5WPNsUIr.net
質問者の日本語がクソだと251のようなレスがついてしまっても仕方ない

257:デフォルトの名無しさん
17/04/23 13:59:45.57 onWybp6E0.net
>>252
ゆ、許された…!

258:デフォルトの名無しさん
17/04/23 21:33:17.66 +WngXvwH0.net
よくわかんないけどmax_elementでゲッツした数字をインクレメントしてそいつをキーにすればいいなじゃないか?

259:デフォルトの名無しさん
17/04/23 22:33:59.07 W0RIoSIf0.net
からのターン

260:デフォルトの名無しさん
17/04/25 01:55:12.08 2owVuizj0.net
fopen()を使う場合は、
shared_ptr<FILE> fp( fopen( "ファイルパス", "r" ), fclose );
と書けるんですが、
fopen_sのように、戻り値でFILE*を取得できない場合は、shared_ptrにできないんでしょうか?

261:デフォルトの名無しさん
17/04/25 02:09:15.69 L5bW9/iP0.net
ステップ1:shared_ptr<FILE> fp( [] { FILE* fp; fopen_s( &fp, "ファイルパス", "r" ); return fp; }(), fclose() );
ステップ2:おわり
マックはかんたんなんだ。

262:257
17/04/25 07:41:45.06 2owVuizj0.net
>>258 おおお、なるほど!ラムダ式が使えるんですね! おかげさまでうまくいきました! この方法なら、shared_ptr化できる対象がさらに増やせますね。 どうもありがとうございました!



264:デフォルトの名無しさん
17/04/25 08:33:19.57 OEZA+HZE0.net
クラス化したほうがいいよ

265:デフォルトの名無しさん
17/04/25 09:08:54.62 qHdDYIsy0.net
>>258
最初にNULL入れておかんと未定義になるかもでよ

266:デフォルトの名無しさん
17/04/25 14:04:32.36 o5+7I7e76.net
超初心者です。
Ptr<Hoge> abc::createHoge()
abc::Hoge::do()
すると、
静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります
と言われました。
Hogeのdoを使うにはどうすればいいですか?

267:デフォルトの名無しさん
17/04/25 14:18:34.30 P05pQrZGM.net
>>262
Ptr<Hoge> p = abc::createHoge();
p->do();
あとは初心者スレに行くべし

268:デフォルトの名無しさん
17/04/25 14:28:56.92 o5+7I7e76.net
できました!ありがとうございます

269:デフォルトの名無しさん
17/04/25 14:33:18.17 Z7zV+yycd.net
いえいえどういたしまして

270:デフォルトの名無しさん
17/04/25 22:33:09.32 ggixqTU6r.net
>>261
他人をおとしいれるのがそんな楽しいのか?

271:デフォルトの名無しさん
17/04/25 23:25:19.17 xMNxUhiOM.net
>>266
そんな事で陥れられるの?生きていくの大変そうだね。

272:デフォルトの名無しさん
17/04/25 23:34:24.96 9Zr4ftW/0.net
>>266
単なる勘違いとか無知とかかもしれないのに、なんでそんなに悪意に満ちた解釈をするのだろう。
それに、その書き込みで誰かが陥れられるというなら、攻撃するより先にその誰かを助けてあげる書き込みをする方がいいんでないか?

273:デフォルトの名無しさん
17/04/25 23:34:51.11 oTWBT7hM0.net
std::shared_ptr<T>::get()

274:デフォルトの名無しさん
17/04/26 00:03:07.94 /Py/BDPD0.net
ステップ1:shared_ptr<FILE> fp( [] { FILE* fp=0←ココ; fopen_s( &fp, "ファイルパス", "r" ); return fp; }(), fclose() );
ステップ2:おわり

275:デフォルトの名無しさん
17/04/26 01:30:30.17 zA6HVqFs0.net
止めて!私のことで争わないで

276:ich1
17/04/26 07:22:16.30 KcpaNie5a.net
URLリンク(goo.gl)
これは嘘でしょ?
本当なら落ち込むわ。。

277:デフォルトの名無しさん
17/04/26 08:02:32.64 jkGhVm4nr.net
>>268
>助けてあげる書き込みをする方がいいんでないか?
>>261さえ無ければ質問者は幸せになれるのだから、質問者がリファレンスを見直せば一瞬でわかるような内容は
「アホに惑わされず一読したままの解釈で正しい」ことだけフォローすれば十分ではないか

278:デフォルトの名無しさん
17/04/26 17:54:18.88 BTdjOnYo0.net
URLリンク(andriasang.com)
URLリンク(game.watch.impress.co.jp)
URLリンク(game.watch.impress.co.jp)
こういうGUIって、どうやって作るんでしょうか?
Win32APIで頑張れば作れるんでしょうか?
それとも、ライブラリが売られたりしているんでしょうか??

279:デフォルトの名無しさん
17/04/26 18:00:10.68 /Py/BDPD0.net
TVTestのソースが参考になる

280:デフォルトの名無しさん
17/04/26 20:24:27.91 5Saru3KQ0.net
もちろん作れる
自分でレンダリングしなきゃいけないしテクスチャも描かないといけないけど

281:デフォルトの名無しさん
17/04/28 01:35:45.00 0T/EiQwUp.net
こういうの作るならQtとか使いたくなる

282:デフォルトの名無しさん
17/04/28 09:33:31.10 UVvcEOOo0.net
>>273
質問者がリファレンスを見直せば一瞬でわかるような内容なら別にフォローの必要もないだろ。
調べないような奴なら安全な方に倒れていた方が良い。無駄でもたいしたコストではない。
よって >>261のせいで質問者が不幸せになるという根拠が無い

283:デフォルトの名無しさん
17/04/28 09:48:07.09 mPeDNIgc0.net
横だけど >>274 のGUIって Qt? GTK+?
Linuxに引っ越ししようと思っているんだが、GUIツールにどれを選択しようか悩み中。
昨今のマイクロソフトはファック過ぎる、二度と使う事は無いと思っていたC++に戻る事になりそうだ。

284:デフォルトの名無しさん
17/04/28 12:15:44.81 4D2iUcPod.net
こういうGUIって、C#で簡単に組めたりするのかな?

285:デフォルトの名無しさん
17/04/28 12:46:51.26 mPeDNIgc0.net
>>280
こういうデザインにしたいと思うなら困難だと思う
結構オリジナリティーあるパーツだし

286:デフォルトの名無しさん
17/04/28 15:07:30.49 MOddalxma.net
>>274
画像をWindowとして表示するって裏技がWin32であったな。
懐かしい。。。
Vista以前のデスクトップアクセサリとかは、そう言う類の裏技で作られてた。

287:デフォルトの名無しさん
17/04/28 18:26:35.16 swDsSHUMr.net
>>278
一瞬でわかるはずの内容でも堂々と嘘を吹き込まれると不安になるだろうから安心を与えることには意味がある
と言ったつもりだったけれど日本語は苦手だった?

288:デフォルトの名無しさん
17/04/28 22:50:15.26 UVvcEOOo0.net
>>283
アレが堂々と嘘ついてるように読めるなら、お前の日本語と俺の日本語違うんだろうね。

289:デフォルトの名無しさん
17/04/28 23:01:16.62 roW/lMqL0.net
>>283
コイツ多分学会信者

290:デフォルトの名無しさん
17/04/29 02:12:01.00 XzsrE9yB0.net
>>279
コンシューマ向けのゲームエンジンだし自前なんじゃ?

291:デフォルトの名無しさん
17/04/29 09:23:14.57 nyANDfpKa.net
学会?
創価の方も、大学的なのも縁が無いが。。。

292:デフォルトの名無しさん
17/04/29 22:43:17.83 QeCXmDWM0.net
ヘッダファイルを作らずに他ファイルからの利用は前方宣言だけですますのって作法的に問題はない?

293:デフォルトの名無しさん
17/04/29 22:55:12.24 3c3Uk9T30.net
関数だったら数による

294:デフォルトの名無しさん
17/04/29 23:03:29.29 S/2IADGO0.net
>>288
その前方宣言をヘッダファイルに書いといて欲しいな。

295:デフォルトの名無しさん
17/04/29 23:08:33.30 hqOpRyPj0.net
そいつが実装の内部で利用するもので参照先が1ファイルぐらいだったら別にいいんじゃないかな
複数あったら流石にヘッダに書いた方がいいよ

296:デフォルトの名無しさん
17/04/29 23:15:36.74 xdExBL2r0.net
引数とか変えたときリンク時(extern ”C”だったら実行時)までエラーが解らないのめんどくさくない?

297:デフォルトの名無しさん
17/04/29 23:16:41.78 Ng1HwepU0.net
でもメンテ時に混乱しそう

298:デフォルトの名無しさん
17/04/30 08:25:35.26 wQZYXO/b0.net
>>292
> (extern ”C”だったら実行時)
知らん
何の処理系?

299:274
17/04/30 09:35:48.73 DBp9z9wf0.net
みなさん、ご回答ありがとうございました。
GUIライブラリって調べてみたら山ほどあるんですね。
>>274のツールもGUIライブラリを使ったのかもしれませんね。
まぁ、カプコンならゼロから作っている可能性もあるかもしれませんがw
調べてGUIライブラリの中ではimguiが最も便利そうだったので、
使ってみることにします。
ありがとうございました。

300:デフォルトの名無しさん
17/04/30 12:29:31.69 kmaYjpOe0.net
>>294
引数とか変えたときって言ってるじゃん?
extern ”C”で引数変えた時にシンボル変えるような処理系の方が知らんわ

301:デフォルトの名無しさん
17/04/30 12:42:40.89 kmaYjpOe0.net
返り値の型を変えたときもそうだけど、変更したとき未定義動作になりやすいからヘッダファイルは作った方が良いよ

302:デフォルトの名無しさん
17/04/30 14:56:05.47 Lu1XcywOr.net
『extern ”C”だったら実行時)までエラーが解らない』
どうしてこう他人を陥れたがるのか不思議で仕方ない

303:デフォルトの名無しさん
17/04/30 15:34:31.43 6FmE5H1T0.net
>>266>>298の言う「陥れる」の意味がさっぱりわからんのだけど、だれか解説してもらえないだろうか?

304:デフォルトの名無しさん
17/04/30 18:30:55.32 iF9ITzdSp.net
ぼくの考えとちがう
って意味だよ

305:デフォルトの名無しさん
17/04/30 19:24:02.13 SNt5gcRU0.net
>>295
>>274のカプコンのがどうなのかは知らんけど、中小のゲーム会社でも自前で作ってるのを見たことある
コンシューマの経験はほとんど無いんでわからんけど、実際の環境での表示と調整を、「どっちも」実機でやらないと話にならんからだろうね
Windows上のゲームとかだと実機も開発もWindowsで済むから、Direct3D上でUIまで作る必要ないけど。

306:デフォルトの名無しさん
17/05/01 17:50:14.23 JVOYymf/d.net
>>300
そういう意味だったのか。

307:デフォルトの名無しさん
17/05/03 00:04:07.99 yi3RDMFU0.net
皆さんカバレッジってどうやって計測してますか?
環境がLinuxなのでgcov+lcov使って見てるんですが、Branch Coverageを見ると大半の行(分岐のない行を含む)で分岐通ってないって計測結果が出てきて使い物にならず困ってます

308:デフォルトの名無しさん
17/05/03 00:19:05.08 jU3FK0a/0.net
>>303
実際通ってないんでしょ
例えばtemplateのコードだと見た目は分岐になっていなくても型で分岐になってるからね?

309:274
17/05/03 00:41:17.84 uzk5Z1ua0.net
>>301
ありがとうございます。
ゲーム開発はたいへんですね・・・。
Windows開発でOKな自分は恵まれてるなぁw

310:デフォルトの名無しさん
17/05/03 01:39:50.15 yi3RDMFU0.net
>>304
じっくり見てみるとSTL使ってる所が軒並みBranch Coverage未達になってるようなので、インラインで展開されたSTLの中に"型で分岐"してるって箇所があると未達扱いになってるんですかね
どっちにしても使い物にならないと思うんですが、何か設定見逃してるのかなあ

311:デフォルトの名無しさん
17/05/03 04:17:06.25 QvJixJfx0.net
テンプレコードを計測対象から外す

312:デフォルトの名無しさん
17/05/04 00:37:27.95 p6U1yQ51r.net
「分岐通ってないって計測結果が出てきて使い物にならず困ってます」
 ↓
「計測対象から外す」
これがアスペの思考というやつか

313:デフォルトの名無しさん
17/05/04 00:38:15.73 1zBs0s1k0.net
ばれなきゃ問題ない

314:デフォルトの名無しさん
17/05/04 07:12:56.30 wet+9Z670.net
ファイル毎にカバレージ結果が出力されててテンプレコードのファイルもあればそれだけはずす

315:デフォルトの名無しさん
17/05/04 07:29:40.84 o/Y/60hm0.net
普通カバレッジ計測というかテストはデバッグビルドでするよね?
なんでインライン展開されてんの?

316:デフォルトの名無しさん
17/05/04 07:50:33.85 z7PkcQKp0.net
ん?

317:デフォルトの名無しさん
17/05/04 08:18:30.19 Qfe4sTHU0.net
>>311
もちろん-O0 -gでやってますが、STL使ってるところでカバレッジ未達の結果になりますね
gcovに拘るつもりも無いので、皆さん普段どうしてるのか教えて頂けませんか?

318:デフォルトの名無しさん
17/05/04 08:40:35.32 h77SQQVQ0.net
「なんでインライン展開されてんの?」
これが会話の出来ないアスペというやつだな

319:デフォルトの名無しさん
17/05/04 08:45:37.98 fxaUnXhO0.net
アスペルガー症候群の話が一種の希望になっているのだな

320:デフォルトの名無しさん
17/05/04 09:21:07.22 wA0ba8dUO.net
へえ

321:デフォルトの名無しさん
17/05/04 09:54:23.37 o/Y/60hm0.net
>>314
え?どこが?

322:デフォルトの名無しさん
17/05/04 09:55:59.68 o/Y/60hm0.net
>>313
俺はgcov使ってるけど行カバレッジしか見てないよ

323:デフォルトの名無しさん
17/05/05 14:14:29.37 b5hiFaeg0.net
自分の思った答えと違う物が出てきたら相手をアスペと言って話を打ち切る方が会話の出来ない奴だな

324:デフォルトの名無しさん
17/05/05 17:05:00.51 vdKQUTyP0.net
意味もよく知らずに単なる記号として使ってるのまる出しだしね

325:デフォルトの名無しさん
17/05/07 07:51:48.66 iaJElGo90.net
質問ッス
ヘッダファイルに
 class LongLongLongNameClass { .... }
という長い名前のクラス定義を書いて、
.cppの方にメソッドの本体を書く場合、
 LongLongLongNameClass::LongLongLongNameClass() { ... } // コンストラクタ
 int LongLongNameClass::someMethodA(int x, int y) { ... } // メソッド
...
とか繰り返しLongLongLongNameClass::をタイプしたりコピペする羽目になり、
この手間を減らしたいのですが何か良いエディターとかプラグインとかはご存知ありませんか、
VCのクラスウィザードは書式がほぼ決め打ちで自由に弄れないのでイヤン

326:デフォルトの名無しさん
17/05/07 07:54:18.33 nwkz2Klr0.net
using

327:デフォルトの名無しさん
17/05/07 08:07:21.46 iaJElGo90.net
>>322
説明が抜けてすみませんが
 LongLongLongNameClass::LongLongLongNameClass() { ... } // コンストラクタ
 int LongLongNameClass::someMethodA(int x, int y) { ... } // メソッド
 ...
というスタイルは変えずに入力したいので、usingやプリプロセッサは極力使わない方向でおながいします
ちな原則usingの使用は関数スコープ内のみとさせていただいております
(ソースコード先頭でusing namespace std;とやる人が定期的に現れるため

328:デフォルトの名無しさん
17/05/07 08:27:15.49 FjvRjK2r0.net
C++の質問というよりエディタ側で解決したいならエディタ側のスレで聞いたほうがいい希ガス

329:デフォルトの名無しさん
17/05/07 09:08:19.96 UkiHSZAH0.net
CTRL+Vを何種類か格納できるソフトがあるだろう

330:デフォルトの名無しさん
17/05/07 09:10:08.52 nwkz2Klr0.net
VSCode辺りのプラグインになんかあるんジャマイカ?

331:デフォルトの名無しさん
17/05/07 09:51:45.18 /CYUNTD10.net
Visual Studio使ってるなら普通にIntelliSenseで補完してもらうんじゃだめなの?

332:デフォルトの名無しさん
17/05/07 10:58:48.07 weBnw+MW0.net
このクソコードを書いたのは誰だぁ! バッ!ってやりたいけど張本人は逃亡済みなんだろうな

333:デフォルトの名無しさん
17/05/07 11:44:37.51 onq3BzaP0.net
Visual studioならヘッダに宣言を書いて、それを右クリックで空の関数を自動実装してくれる機能がある

334:デフォルトの名無しさん
17/05/07 11:56:22.15 w48Ptm+H0.net
>>321
試してみたら普通にIntelliSenseで補完できるけど?
俺はVisualAssist(有料)というのを愛用していてこっちの方が使い勝手いいけど

335:デフォルトの名無しさん
17/05/07 12:27:41.53 iaJElGo90.net
>>329
スマンいま思い出したVS2015とかだったらそれができたんだったorz
どうりでタイピングorコピペ作業による時間浪費に対して悩んでる人が居ないのか、

336:デフォルトの名無しさん
17/05/19 17:53:08.12 /7Hxktnz0.net
C++17か、C++20でもいいけど
virtualをextern "C"みたいにブレースで範囲指定できるようになって欲しい

337:デフォルトの名無しさん
17/05/19 18:07:35.98 TovPGI11M.net
c++って、その手の構文糖は採用しないだろ。

338:デフォルトの名無しさん
17/05/19 18:14:00.03 6plAc3kp0.net
んだよ、Pascalでwith使っとけやトーシロー

339:デフォルトの名無しさん
17/05/19 18:16:16.14 A3DJr2FW0.net
defaultって日本人は標準という意味で使っているけれど、本当は『不履行」とか否定的な意味の単語だよ
de factoと間違えて使っている

340:デフォルトの名無しさん
17/05/19 19:01:46.55 /MnRfLXT0.net
いい加減純粋仮想関数の = 0を見直すべき

341:デフォルトの名無しさん
17/05/19 19:09:38.92 w2H0BIW7d.net
>>335
標準なんて意味で使っている人間はいないと思われる
「既定の」とか「省略時の」だろう。
あと複数の意味のどれかが本来の意味であとは本来じゃないなんて了見が狭いね。

342:デフォルトの名無しさん
17/05/19 22:09:56.69 /7Hxktnz0.net
>>333
その手のって、extern "C"では採用してんじゃん
多相的クラスやインターフェイスを作ってるとき、
キーワードvirtualのタイプ数って無駄な苦しみだと思わない?
多相的クラスでデストラクタがvirtualとか自明じゃん

343:デフォルトの名無しさん
17/05/19 22:28:20.75 ZQ0nZzJJM.net
>>338
デストラクタがvirtualなのが自明なのは継承前提のクラスだけでしょ
ランタイムオーバーヘッドを可能な限りなくしたいC++でそんなこと前提にされてもって感じだけど
まぁ確かにclassのプリフィクスにabstractとかつけたら全部virtualになるとかはあってもいいかもね

344:デフォルトの名無しさん
17/05/20 03:08:45.60 e3UL0Vlz0.net
ヘッダファイルに、すでに他のヘッダファイルで、宣言されているクラスが 
以下のように書かれているのは、なんのためなのでしょうか?

class CHoge_1; // すでに他のヘッダファイルで宣言済み
class CHogehoge; // すでに他のヘッダファイルで宣言済み
class CTestClass : public CMainClass //派生:基底
{
.......
.......
}
よろしくお願いします。

345:デフォルトの名無しさん
17/05/20 03:19:15.34 T/6nYsY80.net
>>340
「前方宣言」でググれ

346:デフォルトの名無しさん
17/05/20 05:47:54.27 AtO1B5PX0.net
>>339
継承を使うからってデストラクタのvirtualが自明って?
んなわけねえだろ、たとえばprivate継承を使うようなケースでは
おまえの言うとおりオーバーヘッドを重視することがあるし
インターフェイスでだっていちいちデストラクタなんぞ作んねえ
しかし多相的クラスというからにはアップキャスト前提は間違いない
俺はそこを言ったんだよ
で、
class [[abstract]] oddsandsods; //これで全部virtualということか
うん、そういうのでもいい
キーワードがちょっと気になるかな
[[polymorphic]]かなって思う

347:デフォルトの名無しさん
17/05/20 10:19:27.00 e3UL0Vlz0.net
>>341
ありがとございます。
りかいできました!

348:デフォルトの名無しさん
17/05/20 15:27:14.98 dnejRURa0.net
お前らクラス図書いてる?
テンプレートとか関数オブジェクトとか面倒くさ過ぎなんだけど

349:デフォルトの名無しさん
17/05/20 16:43:45.54 7xanTQLT0.net
完全なドキュメントよりも、動くソフトウェア
の理念の元書いておりません

350:デフォルトの名無しさん
17/05/20 17:47:18.38 AtO1B5PX0.net
書いたことあるけど、泣けてくるぞ
わざわざ人間がやる必要性が全く感じられないから

351:デフォルトの名無しさん
17/05/20 19:02:29.38 QnLfIsPY0.net
クラス図は書かないけど
コード書く前にこれとこれを用意してこれとあれがこうなってこうみたいな下書きをノートに適当に書いてる

352:デフォルトの名無しさん
17/05/20 19:31:29.85 AtO1B5PX0.net
ああ、それならやるね
結局、ずいぶん違ったものが出来てくるけどw

353:デフォルトの名無しさん
17/05/20 19:31:49.65 AtO1B5PX0.net
うん、正直にそれは恥だ

354:デフォルトの名無しさん
17/05/20 23:17:42.25 dnejRURa0.net
まあ、そんなもんだよなあ
考えの整理するのに書くのは良いんだけど、実装に追従しろとか実装の前に書けとか言われると怠くて敵わんわ

355:デフォルトの名無しさん
17/05/21 08:19:58.20 MWprk4Bd0.net
チームでやるならクラス図かいとかないとカオスにならない?

356:デフォルトの名無しさん
17/05/21 08:27:25.16 AwcA0VMJM.net
実装前に書いたメンテされないクラス図なんて役に立つわけねーやろ
自分の設計用に下書きだけして、あとはDoxygenに任せればよろしい

357:デフォルトの名無しさん
17/05/21 11:02:09.47 a7r1hz6X0.net
目的と使い方と意図がちゃんと書かれたコメントのほうが重要

358:デフォルトの名無しさん
17/05/21 11:42:21.53 N/0f8z0A0.net
astah UMLを使えば
 (クラス図<-->シーケンス図)→コード(自動生成)
というのがだいたいシームレスにできる
ずいぶん違ったものが出来てくるのは慣れの問題かと、
(UML自体かなり計算機の仕組み寄りで、それほど直感的な表現方法とは言えない)

359:デフォルトの名無しさん
17/05/21 11:43:44.12 N/0f8z0A0.net
コードに書かれていることが何よりも真実というのは同意

360:デフォルトの名無しさん
17/05/21 12:59:09.81 ViqOYprV0.net
>>353
これな

361:デフォルトの名無しさん
17/05/21 13:00:19.74 ViqOYprV0.net
ただ、コメントすらメンテされなくなるのが辛いよ…

362:デフォルトの名無しさん
17/05/21 13:37:07.31 EhbYbiNc0.net
コメントのバグは検出不能なのが厄介

363:デフォルトの名無しさん
17/05/21 13:58:18.34 4YmMkUMIM.net
自分は書いてるよ。
大枠だけ書いて細かなクラスは表現しない(したくない)から、むしろツールは使わずに手書きで書いてる。

364:デフォルトの名無しさん
17/05/21 14:15:03.88 G67hupcsr.net
この手の議論で特徴的なのが書かない派の殆どは
自分が書けなかった理由を書かなくて良い理由にすり替えていること

365:デフォルトの名無しさん
17/05/21 17:51:48.31 EhbYbiNc0.net
「ほとんど」でうまく逃げてるな

366:デフォルトの名無しさん
17/05/21 19:37:38.96 D/aE/Z0L0.net
設計書に書いたことをまたコードに書いたら
メンテの手間が増えるじゃないか

367:デフォルトの名無しさん
17/05/21 23:17:17.16 N/0f8z0A0.net
コードの他に何か残すなら、単体テスト(コード)とか試験仕様書とかを書けば良い
単体テスト(コード)や試験仕様書なら、少なくとも書いた範囲についてコードとの不一致は有り得ないのだから

368:デフォルトの名無しさん
17/05/23 07:38:45.51 K3FeDoGDa.net
enumの中身を漏れなくする方法はないの?

369:デフォルトの名無しさん
17/05/23 07:54:11.86 10krpFBv0.net
>>364
?

370:デフォルトの名無しさん
17/05/23 08:12:47.34 I6yYOIGbr.net
>>364
ほれ
namespace himitsu {
enum more {aaa};
}
using more = himitsu::more;
auto e = more::aaa;

371:デフォルトの名無しさん
17/05/23 09:32:50.64 J4YcG+3k0.net
今ならenum classやろ
enum class more{aaa};

372:デフォルトの名無しさん
17/05/23 22:40:27.44 GqYsAhEPp.net
>enumの中身を漏れなく(イテレート)する方法はないの?

373:デフォルトの名無しさん
17/05/24 07:25:20.05 OFlbMgowM.net
>>368
ちょっとはググれカス
URLリンク(zenmai.wordpress.com)
c# foreach まで入力したら enum が補完されるぐらいだからそう言うことをやりたい奴は多いのかも

374:デフォルトの名無しさん
17/05/24 08:14:20.55 Uh0d2nCgr.net
安定のドコグロMM

375:デフォルトの名無しさん
17/05/24 14:16:08.43 K4LsGUxm0.net
Cの時代からenumは未だに慣れない

376:デフォルトの名無しさん
17/05/24 22:12:49.22 Uh0d2nCgr.net
むしろCでintや#defineだらけのenumを使わないコードがずっと疑問だった

377:デフォルトの名無しさん
17/05/24 22:17:53.05 QKoHZUhX0.net
enumに文字列定義でけんの?

378:デフォルトの名無しさん
17/05/24 22:57:19.03 RrwKXt6vM.net
>>369
何故C#?

379:デフォルトの名無しさん
17/05/25 05:00:36.62 sUw+9KVjM.net
>>374
すまん寝ぼけてた
C++ は無理そうだな
Range-based for で何とかしてくれると嬉しいんだけどね

380:片山博文MZ
17/05/26 20:36:20.09 jKduUXcUd.net
言語ではenumの列挙はサポートされてないから、そのまま必要なデータを手書きで記述するか、
プリプロセッサマクロと#includeで汚く書くしかないね。

381:片山博文MZ
17/05/26 20:41:12.76 jKduUXcUd.net
DEFINE_HAGE(baka)
DEFINE_HAGE(boke)
...
こういった内容のテキストファイルを用意し、別のソースでマクロDEFINE_HAGEをテキトーに定義して#includeで
読み込むという素人お断りのテクニックがある。

382:デフォルトの名無しさん
17/05/26 23:46:38.90 Fq1j41HH0.net
URLリンク(i.imgur.com)

383:片山博文MZ
17/05/27 01:04:47.55 uGocpGwpd.net
生き残ってますか、人間ども?

384:デフォルトの名無しさん
17/05/27 02:22:34.43 rhNlL3QR0.net
キミも相変わらずだねw

385:片山博文MZ
17/05/27 02:29:51.07 uGocpGwpd.net
前日はrosのfreetypeを2.8に更新するパッチを作って人ひとり助けた。

386:片山博文MZ
17/05/27 02:32:13.02 uGocpGwpd.net
1日に百人助けられる頃には大金持ちになっているだろう。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch