[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/02 08:57 / Filesize : 200 KB / Number-of Response : 1009
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

C++相談室 part111



1 名前:デフォルトの名無しさん mailto:sage [2014/02/28(金) 07:24:44.31 .net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part110
toro.2ch.net/test/read.cgi/tech/1389620885/

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

次期規格C++1yはこちら
C++14/C++1y
toro.2ch.net/test/read.cgi/tech/1382889622/

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

【重要】
hogeは禁止です。使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。

754 名前:デフォルトの名無しさん [2014/03/25(火) 01:05:27.18 ID:6DffvK7o.net]
>>747
うちはヘッダーに書くんでいいです

755 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 01:06:44.12 ID:PVErYtjz.net]
>>736

756 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 01:07:26.99 ID:bvFcvrs8.net]
だからお前みたいなクズがC++を語っていいスレじゃねえんだよ
ゴミはゴミなりに本を読んでシコシコしてろよゴミC++マー

757 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 01:22:51.90 ID:0aw1H2YW.net]
>>736
再帰使われたら展開しようがないし、再帰は再帰でも末尾再帰なら展開されるかもしれないし、展開したらめちゃでかくなるので展開やめるかもしれないし
必ず展開してほしいなら inline assembler 使ってろよ。

758 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 01:25:09.34 ID:bvFcvrs8.net]
>>752
は再帰のできない出来そこないのエセプログラマー
質問者に嘘を教える最低の人間

759 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 01:26:18.57 ID:Hi7fuqGU.net]
>末尾再帰

末尾についてkwsk!

760 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 01:30:30.16 ID:bvFcvrs8.net]
また馬鹿が墓穴を掘った

761 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 02:39:19.20 ID:/N09nw1b.net]
>>752
jmpでまとめられる可能性は消えないけど、そこはdefineマクロでいいんじゃね?
>>754
末尾再帰がループに最適化される状況の場合、
ループ化されたコードがインライン展開される可能性を言ってるんじゃない?

762 名前:デフォルトの名無しさん [2014/03/25(火) 03:03:21.00 ID:6DffvK7o.net]
inlineをcppに書くとか言ってるバカを産んだクズ母親は産む前におろすかどうかよく考えてほしかった



763 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 07:17:51.54 ID:fi2ZaDIT.net]
>>757
おっと勇み足

764 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 07:18:57.09 ID:Xzsx0aVO.net]
リンカさえ頑張ってくれれば別の言語でかかれててもインラインに出来るし

765 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 07:41:34.25 ID:RtgkM+Fr.net]
>>756
今時 define なんか奨めるなよ...

766 名前:デフォルトの名無しさん [2014/03/25(火) 08:03:36.81 ID:+8Thsnpr.net]
リンカは関係ないんでね?
a.hに関数宣言、a.cppにinline関数を記述、a.hをインクルードしたb.cppからその関数をコールしている場合って
b.cppコンパイルしている時はa.hの宣言しか見えてないから、inline展開する可能性すらないと思うんだよね
とっても高級なコンパイラーさんだとちゃんとやるのもあるのかもしれないけど

767 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 09:27:39.61 ID:cGvrEDGu.net]
>>761
今時のリンカはリンク時にインライン展開やVTABLEの解決を行うよ。

768 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 10:59:44.80 ID:1OTJ8TFG.net]
検察が有罪にする自信があるなら、とっくに釈放してた。
ゆうちゃんの反撃の機会を出来るだけ奪っておかないと勝てそうも無いと考えている。
もう検察は詰んだ。

769 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 11:02:33.80 ID:1OTJ8TFG.net]
誤爆です、すみません

770 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 11:48:24.33 ID:JLDIFaf/.net]
いやそこはコンピュータをのっとられて勝手に書き込んでしまいました
というべき

771 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 12:02:56.21 ID:sCC7tw25.net]
C++は使えるがC#は使えません

772 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 12:46:48.73 ID:trPB7Xb2.net]
私はVBしか使えません 塀えもん



773 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 12:49:22.64 ID:bvFcvrs8.net]
ゴミはC++を使えない

774 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 13:12:17.25 ID:PVErYtjz.net]
>>736,761
(>750 で書き込んだつもりになってて書けてなかった)
7.1.2 [dcl.fct.spec] p4
"An inline function shall be defined in every translation unit in which it is odr-used ..."
っていうことになってるんだよ。これに従えば「コンパイルできたとき〜」とか「リンカが〜」とかそもそも
考える余地が無い。

・・・どういうわけか gcc も clang も警告が出るだけでエラーにはしないみたいだけど。
なんか読み違えてるのかな?

775 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 13:41:06.02 ID:cGvrEDGu.net]
>>769
規格上はそこに書いてある通りで「インライン関数は、それが使われるすべての翻訳単位で、
かつ一字一句同じに定義されなければならない」ので、インライン関数の定義を.cppに書くなら
その関数を使う.cpp全部に書かないと、厳密に言えば規格違反。

もっとも現実問題としては、非インライン関数として扱えばコンパイルはできるし、リンク時に
インライン展開することも出来るから、大した問題じゃないよね。

776 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 17:57:02.60 ID:C5vqFeWi.net]
shallなんて所詮努力目標

777 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 18:20:39.65 ID:1coUayuU.net]
むしろshallは死語

778 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 19:19:27.69 ID:mtUgnBBf.net]
>>769
shallなのか
shallでも警告で済ませるって低脳C++erが多すぎてエラーにはできないんだろう

>>770
低脳C++erは非インライン関数になっても動けば良いんだで終わりだろうし

779 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 19:35:38.81 ID:3xpnko1c.net]
>>772
代わりはなに?

780 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 20:53:26.52 ID:JLDIFaf/.net]
shnone

781 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 02:28:32.59 ID:VUuUSoQL.net]
まとめると、inline はヘッダに書けよ、糞共!ですね

782 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 02:38:05.96 ID:+MovJmZj.net]
コンパイル単位に閉じた些細なマクロ程度は
static inlineで代用することをお許しください



783 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 03:38:14.96 ID:QrlG1cP3.net]
>>777
それstaticもinlineもつける必要ないだろ。

784 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 07:00:24.10 ID:BPRBwKR1.net]
よっぽどマクロ好きなんだな

785 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 07:34:26.47 ID:40e4BIeF.net]
>>778=バカ
シンボルが他の翻訳単位に漏れても気にしないらしい

786 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 07:36:46.19 ID:QrlG1cP3.net]
>>780
いや、ファイルローカルな名前なら無名名前空間に入れるよ。

787 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 07:41:04.76 ID:5Z0iw9O8.net]
>>780
その方法は、次のC++(本来はC++11)から非推奨です

788 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 08:38:01.10 ID:K+udxXcM.net]
無名名前空間とinline良く使う

789 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 08:52:55.41 ID:4JZv+4Js.net]
どう翻訳されるかどう翻訳されたかわからない人はインラインはただ関数の頭に書いているだけになるのね

790 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 21:30:01.10 ID:5AgnDT0q.net]
>>747
それをつけたとしても必ずinline化されるわけではない

791 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 02:13:45.44 ID:s0Hyzeif.net]
>>785
define最強やな!
機械語になった時に括り出されてjmp先な関数モドキになる可能性は消えないけど、
少なくともプリプロセッサ抜けた段階ではインライン展開されているのがほぼ確実や!

792 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 10:09:23.86 ID:yKWg+dVB.net]
そもそもinlineの議論をしている筈なのに、
関数の実体を作りつつも別途inline展開できる可能性に触れていない辺りお郷が知れている。



793 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 12:09:04.74 ID:oKJ8dIwZ.net]
>>787
> 関数の実体を作りつつも別途inline展開できる可能性

最近知ったのか?
その方向の話になってないから、誰も触れてないだけかと。

794 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 13:48:00.57 ID:qd9OiQZO.net]
リンク時のインライン展開に触れてる人もたくさんいるけども

795 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 16:08:31.30 ID:4HvGfxKh.net]
vc2013はリンクの最中にclが走ることがあるな
コンパイラのエラーが出て驚いた

796 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 18:22:03.52 ID:rDeXrVt7.net]
ヘッダにコード書かなければなんでもいいよ

797 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 18:46:22.36 ID:iV1oOl59.net]
>>791
なんか問題あるの?

798 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 21:19:57.03 ID:XUtydu4b.net]
>>789
それがなにか?

799 名前:デフォルトの名無しさん [2014/03/27(木) 22:50:57.72 ID:HnupLlaF.net]
>>791
もしやテンプレート知らない人?

800 名前:デフォルトの名無しさん [2014/03/27(木) 23:23:03.72 ID:wMybxixl.net]
またそこに戻るんかいw

801 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 23:26:18.42 ID:wG7r5lAh.net]
ヘッダに書いた関数テンプレート、
ずっとinline付けずにいた。
素で忘れてたぜ。
・・・放っとこう

802 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 23:54:36.72 ID:qd9OiQZO.net]
ヘッダに定義を書いていいもの = 定義が複数存在してもよいもの = One Definition Ruleの例外は
言語仕様3.2.5で規定されているので各自規格書で熟知すべし。

具体的には、クラス型、列挙型、外部リンケージのインライン関数、クラステンプレート、
静的でない関数テンプレート、クラステンプレートの静的データメンバ、テンプレート引数の一部が
未定のテンプレート特殊化、がそれにあたる。



803 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 00:29:27.89 ID:7ZcWId+X.net]
だれも、規格で認められているかどうかの話をしているわけじゃねぇだろう。

804 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 00:36:24.93 ID:3sLtcVZJ.net]
あれこれ脱線してたけど、発端は>>687だったんだよな。
こいつがヘッダにコードを書いてはいけない理由を言わずにフェードアウトしたから
論点があやふやなまま盛り上がってしまった。

805 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 00:44:14.23 ID:bndx9KDY.net]
>>796
関数テンプレートの半分に inline を付け、残りの半分には付けずに
どうなるか観察するんだ。

806 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 00:57:01.43 ID:afXKJyWJ.net]
struct test {

};

cout <<

807 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 00:58:37.27 ID:afXKJyWJ.net]
struct test {
int a;
};

test t;

cout << t.a;

printf("%d\n",t.a);


このときオペレータってそれぞれなにが使われるんでしょうか?

t.a の値を得る処理にってことです。

808 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:05:51.26 ID:n4ZQH/GV.net]
>>687はc++初心者

809 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:36:21.34 ID:f7DW739E.net]
>>797
ヘッダーはコンパイラーが提供するもので
プログラマーが書くものではないのだけれど
そこんとこOK?

810 名前:デフォルトの名無しさん [2014/03/28(金) 01:38:42.05 ID:eWCuk+g8.net]
>>804
え?
どこがOKって?

811 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:41:30.74 ID:3sLtcVZJ.net]
お前は何を言っているんだ

812 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:42:24.50 ID:zzqObK8g.net]
どこから突っ込むべきなんだこれは



813 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:44:21.20 ID:6NuEA+Qf.net]
突っ込むのもアホらしいから(・∀・)ニヤニヤして放置しとこうぜ。
この板には必死で背伸びしてカキコしてる雑魚が確認されてる。

814 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:44:57.80 ID:IWvgfppL.net]
>>802
ドットオペレータ(ドット演算子)

815 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:51:22.27 ID:f7DW739E.net]
>>805
書いたとおりなのだけれど
日本語が読めない?

816 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:55:19.17 ID:iffS8S5F.net]
コンパイラメーカーが提供するインクルードファイルのことをヘッダーって言いたいのかな?

817 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 02:10:57.21 ID:f7DW739E.net]
何故ここでファイルが出てくるのかわからないけど
ISO/IEC 14882:2011の16.2章で出てくるヘッダー以外ありえんでしょう

818 名前:デフォルトの名無しさん [2014/03/28(金) 02:44:23.95 ID:calBLgbH.net]
>>804
嘘つき

819 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 02:55:01.76 ID:iffS8S5F.net]
何かとても違和感を感じる日本語だ

820 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 04:15:01.77 ID:tz1oDrc8.net]
嘘つき(震え声)

821 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 07:11:23.51 ID:bndx9KDY.net]
>>804
どうでもいいけどこのスレ(前だか前々だか)で2度目だよ
そこんとこOK?

822 名前:デフォルトの名無しさん [2014/03/28(金) 08:18:34.16 ID:n4ZQH/GV.net]
まとめ
ヘッダーにコードを書く奴をクビにしていいか?
→それだけの情報だけじゃわからないし、あんたC++知ってる?

インラインはヘッダーに書くのが正しい?
→意図的に展開を望むならヘッダーに書け、ソースに書いてリンカに任せる奴は3流

でオッケー?



823 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 08:22:21.13 ID:ChGgRCpU.net]
まとめサイトの人でおk(笑)

824 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 08:23:03.82 ID:3sLtcVZJ.net]
> 意図的に展開を望むならヘッダーに書け

またそこに戻るの? C++に関数を確実にインライン展開する方法なんかないんだってば。

825 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 10:04:49.02 ID:j2aynJgg.net]
マクロで書いちゃえば確実に展開されそうだが、
もはやC++関係無い気がしてきた

826 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 10:54:55.55 ID:CLpXvs9U.net]
インラインアセンブラをマクロ定義すれば。w

827 名前:デフォルトの名無しさん [2014/03/28(金) 12:13:00.28 ID:2xoz0m2D.net]
>>819
実際やってみれば?gccはなるよ
ただ規格云々じゃなく一部に通用する技だとは思う

828 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 12:37:10.86 ID:3sLtcVZJ.net]
>>822
まあ環境を限定すればそれぞれにノウハウはあるだろうね。

829 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 16:39:02.96 ID:KxTxPlps.net]
>>823
移植性を低下させるバッドノウハウだね

830 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 16:46:07.33 ID:zzqObK8g.net]
最適化なんて割とそういうもん

831 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 17:19:59.79 ID:konPatBX.net]
ポータビリティという名のバッドノウハウ

832 名前:デフォルトの名無しさん [2014/03/28(金) 21:04:39.83 ID:n4ZQH/GV.net]
ヘッダーにコード書いてエラーになるコンパイラーなんて見たことないので移植性が低下するっつうのは嘘



833 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 21:11:34.54 ID:1ftEUC5z.net]
インライン展開してほしい→ヘッダーにコードって発想ぶっとんでるな

834 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 22:06:39.76 ID:bndx9KDY.net]
>>819
「望む」って日本語のニュアンス次第じゃね?

835 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 23:10:07.20 ID:WinGstvT.net]
>>827
コンパイルエラーにならなきゃいいのか (w

836 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 23:11:29.84 ID:R2vi+E3z.net]
inline付けとけば平気アル

837 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 23:17:12.63 ID:nIGZYB8c.net]
inlin

838 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 00:45:20.88 ID:+tSITK56.net]
inlineって卑猥すぎ。使うなよ

839 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 00:58:19.51 ID:ukiMHmOI.net]
joytoy に変えるか

840 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 00:59:16.18 ID:ukiMHmOI.net]
#define joytoy inline

841 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 08:19:52.66 ID:1B2wagA9.net]
ストリングテーブルを2分木で管理して高速検索できるようにして
かつ、インデックスで即時参照できるようなクラスは作れないでしょうか
map<string, int>だとインデックス検索に時間がかかるし
vector<string>だと検索に時間がかかる
データを2つ用意するのがベストでしょうか

842 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 08:30:01.43 ID:9XRu23e9.net]
インデックスじゃないとダメなのか
ポインタならすぐに参照先が見れるぞ



843 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 10:17:04.73 ID:lTQLq19d.net]
>>836
自作するなら、P-Tree (Trie) とかあるけど
とりあえず unordered_map を加えて時間比較してみたらどうだろう

844 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 10:47:41.14 ID:kK1JTf3+.net]
Boost.MultiIndexContainer

845 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 11:03:11.34 ID:2SiNGRJb.net]
2分木で管理されたらそれはインデックスそのものだと思うのだが「かつ」って何だ?
mapだと検索に時間がかかるという意味が分からない。
mapの複雑さは対数でしょ?

846 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 11:15:42.10 ID:kK1JTf3+.net]
mapのキー以外にも整数インデックスでアクセスできるようにしたいんでそ

847 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 11:34:09.27 ID:2SiNGRJb.net]
ああ、索引のインデックスでなくて
配列のインデックスという意味か

848 名前:836 mailto:sage [2014/03/29(土) 11:49:07.41 ID:1B2wagA9.net]
人工知能もどきを作るのに
ストリングテーブルを作って、その整数インデックスだけで
データを管理したいと考えてたのですが
既登録の単語を検索するときはmapの方が速くて
整数インデックスから文字を見つけるときはvectorが速いので
両方の良さを併せ持つクラスを作れないかと悩んでました
vector<string *>とmap<string, int>の合わせ技と
Boost.Multi_Index_Container試してみます
ありがとうございました

849 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 11:54:55.97 ID:kK1JTf3+.net]
Boost.MultiIndexContainerはテンプレートバリバリに使っていてエラーメッセージが長くなって分かりづらくなることもあるから注意
その使い方ならこのページの「挿入順を知っているstd::set」が近そう
https://sites.google.com/site/boostjp/tips/multi_index

850 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 11:56:54.59 ID:8LVPedzS.net]
>>836
データの件数や更新頻度による。
文字列テーブルの要素数はどれくらいなのか、更新頻度はどれくらいなのかがわからないと答えようがない。

851 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 11:58:46.13 ID:p6y4pL3O.net]
つ libstree

852 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 12:06:01.03 ID:5Prxf0C5.net]
そもそも本当に配列インデックスアクセスが必要なのかねぇ。
修正したらインデックスはずれるし
修正しないんならインデックス値の代わりに
ポインター値もっときゃいいんではないかと。
インデックスの大小比較が必要なケースなんだろうか



853 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 12:07:20.55 ID:WP/G2Jdd.net]
答えようが無いって回答が一番アホ
無理して答えなくていいよ

854 名前:デフォルトの名無しさん [2014/03/29(土) 12:32:50.14 ID:1B7gf6oU.net]
答えようがないから、相談内容に指摘を入れることを理解できない馬鹿や
インラインをヘッダーに書く意味をできない馬鹿がこのスレ多すぎますよ
妄想で物事はか語らずちゃんと勉強して理解した上で語りましょう

855 名前:デフォルトの名無しさん mailto:主観で「気に食わない」と表明しているだけ? [2014/03/29(土) 12:44:59.06 ID:T0jzXlJE.net]
QZ がよくやる円状学習ってやつでは?
生暖かいめでツッコミまくるのがいいでしょう

856 名前:デフォルトの名無しさん [2014/03/29(土) 18:29:45.78 ID:dD6X7nCn.net]
構造体の配列を初期化したいのですが
↓ですと初期化子の数が多すぎるといったエラーになってしまいます。
 struct Hoge { int Piyo; };
 std::array<Hoge, 2> HogeArray = { { 123 }, { 456 } };
どのように記述すればよいでしょうか?

857 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 18:35:24.51 ID:dD6X7nCn.net]
すんません以下のようにしたら通りました。
 std::array<Hoge, 2> HogeArray = {{ { 123 }, { 456 } }};

858 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 18:37:09.12 ID:kK1JTf3+.net]
std::array<Hoge, 2> HogeArray = {{123,456}};でもいい

859 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 19:02:59.09 ID:AwSwPmzi.net]
そのバカくさい二重括弧はC++14で修正予定

860 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 19:47:58.21 ID:ukiMHmOI.net]
構造体の中に構造体があるのか

861 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 08:27:30.18 ID:VjU+6nmm.net]
そのバカくさい二重括弧を排除したら
struct {unsigned sz, ary[100];};
struxt {unsigned ary[100], sz;}; ← この初期化が面倒じゃん
実際は従来記法もそのまま使えるんだろうけどさ

862 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 11:35:04.42 ID:VZDaHlzY.net]
>>856
心配すんな
排除されることはない



863 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 13:53:57.58 ID:6aZDF4w4.net]
C++のプロの人、お知恵をお貸しください

T** m_W;
T func(int y, int x);

void setW() {
for(int y=0 ; y<m_height ; ++y) {
for(int x=0 ; x<m_width ; ++x) {
m_W[y][x] = func(y,x);
}
}
}

のような関数のうち、Tを返すfuncの部分をラムダ式を突っ込めるようなテンプレートにしたいのです。

template<typename T> void setW(??? func) {
for(int y=0 ; y<m_height ; ++y) {
for(int x=0 ; x<m_width ; ++x) {
m_W[y][x] = func(y,x);
}
}
}

という感じになると思うのですが
T型を返すことを強制した関数オブジェクト(?)を指示するためには
???部の型として何を指定するのが適切なのでしょうか?

864 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 14:10:06.25 ID:mx5qZxk6.net]
>>858
引数がint型2個と決まっているなら std::function<T(int,int)>

865 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 14:25:02.49 ID:0Wbn/Mof.net]
>>858
T型を返すってのをどの程度強くことを強制したいかだけど、
m_W[y][x]に代入できればそれでいいような気がする。

template<typename F> void setW(F func);
でいいのでは?

866 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 14:48:37.61 ID:6aZDF4w4.net]
>>859
はい。引数2個限定で問題ありません。
std::functionというので指定するのですね。
勉強になりました。ありがとうございます。

>>860
ありがとうございます。
今回は引数2個限定で良かったので、859さんの方法で良かったのですが
引数の数が変わってくるような場合には便利そうです。
別の機会に使っていこうと思います。

867 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 15:12:09.92 ID:w88t0C6o.net]
functionはポリモーフィックtype-eraseするときに使うものだろ。
この場合template<typename T, typename lambda_t> void setW(lambda_t func);
とするべきでは

868 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 15:17:52.06 ID:mx5qZxk6.net]
>>862
> functionはポリモーフィックtype-eraseするときに使うもの
そうとも限らないと思うけど、この例も一種のtype erasureだよ。
継承関係に関わらず特定のインターフェースを備えた型はなんでも受け入れられるんだから。

869 名前:862 mailto:sage [2014/03/30(日) 16:22:05.22 ID:w88t0C6o.net]
>>863
そだね
猿の勢いで脊髄反射したスマン。
Tを返すことを強制したいなら
result_ofを使えばいいと思ったけど、
呼び出し箇所の数だけテンプレートが
インスタンス化されたらたまらんか。

870 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 21:13:56.97 ID:ERqvs8f4.net]
三角関数の関数ポインタを作ろうと思い以下のようにしたのですが次のエラーがでました。

#include <math.h>
double (*myfunction[])(double) {sin, cos, tan};
エラー:関数定義のようですが、パラメーター リストがありません。外見上の本体をスキップします。

どこか根本的に間違っているのでしょうか?
パラメーターリストというのが良く分からないです

871 名前:デフォルトの名無しさん [2014/03/30(日) 21:28:23.54 ID:ktWAco2D.net]
(関数の)変数を定義して代入では

872 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 21:31:05.48 ID:oPW3xR3D.net]
>>865
double(*myfunction[])(double)={sin, cos, tan};



873 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/03/30(日) 21:37:45.66 ID:6C3OsSaD.net]
>>865
配列の初期化の書き方は注意が必要です。
ideone.com/Yive9q

874 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/03/30(日) 21:44:12.52 ID:6C3OsSaD.net]
あれ、そもそも何でコンパイル通らないんだ?
コムパイラーは何だろう
 Visual C++: OK
 G++:OK
 clang:OK

875 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:19:29.79 ID:6RO/tmV/.net]
もうC++を選択する理由がないんだよな、Windowsプログラミングでも
メモリ意識とかやってられないし、C#に完全に置き換わったよ

メモリオナニーしすぎだろC++えrって

876 名前:デフォルトの名無しさん [2014/03/30(日) 23:21:03.61 ID:TtK4Vlhp.net]
別にWindowsで仕事してないし

877 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:28:38.13 ID:6RO/tmV/.net]
ああ、Macってこと?なるほどね

なんの思想にかぶれちゃったのかね

878 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:30:56.06 ID:7KxU0paA.net]
何言ってんだコイツ?

879 名前:デフォルトの名無しさん [2014/03/30(日) 23:32:27.80 ID:TtK4Vlhp.net]
Mac(笑)

880 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:33:22.66 ID:qrMW5ntB.net]
一人だけレベルの低い奴いないかここw

881 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:34:08.27 ID:6RO/tmV/.net]
別にWindowsで仕事してないし の意味がちょっとわからなかったんだ
Windowsで仕事をしてるのか、Windowsアプリケーションを作る仕事しているのかね

前者の場合、言葉の意味を勘違いしてる輩かと思って、俺はMac派ですよみたいな思想
あーいう感じはちょっと受け入れられないね

882 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:40:44.70 ID:s2pjmqPg.net]
>>865
C++11にはイニシャライザリストってのがあるらしいんだけど、
それを使うように記述したのが>>865じゃないの?



883 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:41:22.91 ID://pyQIJP.net]
OpenVMSとVxWorksだから(棒
いやまあ、両OSでC++使えるようになって、かなり楽になったよ

884 名前:デフォルトの名無しさん [2014/03/30(日) 23:59:59.81 ID:VZDaHlzY.net]
>>876
Linux知らないの?

885 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:06:43.04 ID:4LHV21Ew.net]
C++ではMacが最強だろ。Clangと言えばMac。

886 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:07:16.15 ID:iPLvWewK.net]
>>870
きちんとしたドメインモデルを作ろうとしたらやっぱりC++では?

887 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:08:40.75 ID:JMzV2FUX.net]
MacはObjectiveCが何ちゃらと噂に聞くが

888 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:08:53.07 ID:YuwcCGee.net]
LinuxはCでしょ

889 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:31:25.16 ID:h/7kGidF.net]
c++代表Qt

890 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:51:35.78 ID:5uvxJF26.net]
>>881
そこはもうC#の方がやりやすい

891 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:59:35.85 ID:4LHV21Ew.net]
Winでは低脳・ゆとりの似非C++使いはMFC、真のC++使いはQtって感じになっているからな

892 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:01:48.52 ID:3ugtc2xG.net]
C++がモデル化に於いてC#やJava()より上な訳がないだろう
視野の狭くなった老人はここまでボケと妄想が激しいものなのか



893 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:39:04.83 ID:YuwcCGee.net]
んなことはないC#は洗練されている

ネットワークプログラミングするときはC++ではつまづく

894 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 02:09:05.98 ID:aH5oPSHV.net]
老害が無理してC++理解しようとすると決まって発狂するな

895 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 02:35:58.26 ID:h/7kGidF.net]
>>888
まさかC++ではsocket/winsockを使ってないよな

896 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 03:02:46.32 ID:JKT8WNOO.net]
asio使え、asio。そいでC++の迷宮を彷徨え

897 名前:デフォルトの名無しさん [2014/03/31(月) 04:59:04.83 ID:ftA6xnEH.net]
AsioはLinuxでうまく機能しない。
非同期プログラミングができるライブラリ全般がうまく機能しないと考えて
差し支えない。

898 名前:デフォルトの名無しさん [2014/03/31(月) 18:43:25.87 ID:yborCUTf.net]
今からC言語を勉強し始めるものですが、Visual Studioはどの年のものをインストールした方がよろしいでしょうか?

899 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 18:58:16.49 ID:FN8LC2rG.net]
>>893
最新いれとけ

900 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:16:22.59 ID:yborCUTf.net]
>>894
いれようとしたらWindowsが古いって言われました

901 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:17:48.49 ID:JMzV2FUX.net]
条件あとだしやめい

902 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:17:51.67 ID:NWhaiSr6.net]
>>895
まて、お前はまず Windows を新しくしなければならん
来週までにな



903 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/03/31(月) 19:23:16.60 ID:60O6Nh3u.net]
VS2008入れとけ

904 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:23:49.11 ID:yborCUTf.net]
近い内に買うと思う、XPだから
でも母次第です

905 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:29:36.88 ID:FN8LC2rG.net]
>>899
金が無いなら UbuntuかPC-BSDいれたら?
無料だしセキュリティもしっかりできるし。

コンパイラとか開発環境も全部無料でついてくるし
ツールやOSのソースコードも全部見えるから勉強にもなる。

906 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:31:26.73 ID:i99iYryZ.net]
VSでやりたいことがはっきりしてる場合は
そのやりたいことのサンプルとか参考になりそうなプロジェクトファイルを配布しているかどうかをしらべ
そのプロジェクトファイルのバージョンに合わせておくのが無難

907 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:35:25.75 ID:aH5oPSHV.net]
母親に頼んで買ってもらえ
アカデミックパックなら安く買えるだろ
学生の特権なんだし

908 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:42:13.49 ID:DtbGifhU.net]
>>900
Visual Studioのインストールごときにてこずるような初心者にそんなもの勧めるな
「来週以降ネットに繋ぐな」と言い渡して去るのが真の優しさ

909 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:57:11.33 ID:dwfvfwUS.net]
回路とか好きな引きこもりの義弟にVSあげたんだけど使ってくれてるかなあ
俺が電話変わってもらうと無言か切られるかだからわからん

910 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:01:36.02 ID:FN8LC2rG.net]
>>903
いや、このXPのドタバタの間にちょっとでもユーザー増やしたいなぁ・・・と

911 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:07:44.05 ID:JMzV2FUX.net]
正直Gnuのソースは読みにくい

912 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:09:20.82 ID:FN8LC2rG.net]
>>906
それは同意。
「公開せにゃならんやったら、せめて読みづらくしとこ」
って感じなのかと思うくらい酷いのあるね。



913 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:12:14.52 ID:JMzV2FUX.net]
前に勉強がてらコマンドのソースとかみようとしてやめた
関数名の前で改行とかいるのかね?

みるならFreeBSDのほうがきれい

914 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 21:00:34.11 ID:xTBmJi7C.net]
GNUはオープンにしてただで使えるだけで有難いと思え、乞食って感じだろ
欧米のプログラマはギブアンドテイクだけど(ギブが先)
でも、乞食(日本のドカタ)はテイク、テイク、ギブするのは文句だけだからな

915 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 21:47:43.53 ID:aH5oPSHV.net]
DTV板とか行くと文句たらたらのコジキしかいないよ
自炊が鉄則なのに文句だらけ

916 名前:デフォルトの名無しさん [2014/03/31(月) 21:50:33.54 ID:b96nnelI.net]
>>908
あの改行には神の見えざる何とかみたいな壮大な名前がついてて由来とかもあるんだよね。
全然興味なかったんで三秒で忘れちゃったけど。

917 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 22:43:13.46 ID:xTBmJi7C.net]
>>910
乞食、それは日本の美しい魂
そしてそれを行動にした、テイク、テイク、ギブするのは文句は日本の美しいおこないなのかもな

918 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 23:27:31.97 ID:JKT8WNOO.net]
どこぞのオプソ・プロプラのプロジェクトを
著作権違反しない程度にマネてオリジナル主張

919 名前:するのがGNU
全部とは言わないがGNU系のプロジェクトにオリジナリティなどほとんどない
[]
[ここ壊れてます]

920 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 01:02:08.41 ID:b5JB/Jhx.net]
いまやオリジナリティを有するものって日本発が多い
IT先進国の日本のものがパクられるのは仕方ない

921 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 01:39:10.72 ID:M/SUb6RV.net]
>>911
関数の宣言や呼び出しと、実装を分けることができるから
つまり)の直後が改行なら実装
古い時代の文化だけど

922 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 01:52:27.98 ID:0nwPuo2f.net]
消費税が上がるらしい



923 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 02:30:23.14 ID:SxmvLrt8.net]
>>916
エイプリルフール

924 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 03:14:35.48 ID:Xl1FJm59.net]
>>913
逆だ、GNU より先にめだったオプソがあったのか?BSD ライセンスくらいしかなかったのでは?

925 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 03:15:10.37 ID:Xl1FJm59.net]
>>914
そんなもんがあるのか?実例よろしく

926 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 03:57:50.76 ID:QacWHPnJ.net]
ja.wikipedia.org/wiki/%E5%B6%8B%E6%AD%A3%E5%88%A9

こういう人がいたんだよね

927 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 10:32:45.63 ID:SqhIr943.net]
>>913
プロプラなもののより良い代替をオプソで提供するのがGNUのそもそもの目的だから、何か微妙に勘違いしてないか?

928 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 19:44:07.99 ID:PR3x9no5.net]
>>918
public domain

929 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 20:12:39.33 ID:eefQLiAy.net]
boostの多くは日本語のwebにあったのを参考にして作ったのが多いらしいよね

930 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 23:16:09.35 ID:dzlTlaxn.net]
よね、と言われてもな
ソースくれよソース

931 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 23:35:49.48 ID:8KYb0WXA.net]
起源は韓国ニダ

932 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 23:58:44.85 ID:BTv6StGE.net]
boostで日本人だと言われても、k.inaba氏くらいしか知らんぞなもし



933 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 22:18:15.83 ID:ntgtG/kn.net]
boostは新しいC++の土台になっているよな
つまり日本はすごくC++に貢献しているってことだよな
華々しい表は欧米の奴らに持たせ、日本は縁の下の力持ちとして強力貢献って感じか

934 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 22:54:04.05 ID:af4pwMis.net]
そんなことに国を持ち出さないでくれ
優秀な奴がたまたま日本生まれだっただけだろう
ただ…超便利!

935 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 22:58:16.91 ID:F+VXkOpH.net]
インターフェースクラスをテンプレートにするのってアリでしょうか?
そういうのを見たこと無くて違和感があるんですが。

class Aがclass Bを所有してます。
AはBの関数を呼んでますが、Bの方もAの関数を呼ぶ必要があり、
直接相互に呼びあうのは行儀が悪いのでBが呼ぶ部分をインターフェースとして切り出しています。

class A : public IA{
vector<B *> member;

class B{
public:
B(IA *owner)
: m_owner(owner){}

void xxx(){
m_owner->func();
}

みたいな感じで。実際はもうちょっと複雑なんですが。
で、Bが保持するデータの型をパラメータしたくなったんですが、
そのデータはAにインターフェースを介して渡してもいるという状態です。
あ、ちなみにこのインターフェースはB以外からは呼ばれることはありません。

936 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 23:55:29.98 ID:J7anNUIN.net]
相互参照が発生してる時点で違和感がある C++は相互参照を上手く扱えないのでそれを取り除くことから考えてみたらどうか

937 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 00:31:02.32 ID:03j6Q/GA.net]
そもそも >>929 が書いたコードは } が2つ程足りないのだが

938 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 00:42:49.70 ID:oq+5i/Zd.net]
>>931
そうなっているのは、こんな感じって示すコードだからだろ

939 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 01:09:14.39 ID:03j6Q/GA.net]
フラクタル構造だろコレ
無理に決まっているジャン

940 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 01:56:33.54 ID:03j6Q/GA.net]
よくよく見たらIAを参照しているだけだからネストしてもいないんだな
というか普通にできるんじゃね?

941 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 02:33:18.90 ID:CBuO+9f9.net]
小手先の実装はどうでもよくてAにメンバ関数テンプレートを持たせるのが本質的な解法じゃないのか

942 名前:デフォルトの名無しさん [2014/04/03(木) 07:03:25.84 ID:giRIvbWR.net]
>>931
そんなことは全く問題にしてない



943 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 07:26:26.82 ID:7TERZTkc.net]
>>929 のコード片見て後略とわからない奴がいるとは...

944 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 23:01:08.26 ID:ED9H8RNO.net]
>>929
ごめん、ちょっとよくわからない。
template をどこにつける意図?

1.class IA
2.class A
3.そのメンバ

945 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 08:29:34.22 ID:ziFJe0J7.net]
皆さんレスありがとうございます

>>938
BにtemplateつけたくなったらIAにもつけなくてはならなくなった、みたいな感じで

template<typename Data>
class A : public IA<Data>{
vector<B<Data> > member;

template<typename Data>
class B{
Data data;
public:
B(IA<Data> *owner)
void xxx()
{
m_owner->func(&data);
}

template<typename Data>
class IA{
virtual void func(Data *){}
};

みたいになるのかな

>>935
えーと、となると
インターフェースにメンバ関数テンプレートを持たせるのはアリか?
という質問になりますね

946 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 08:48:27.82 ID:kYKaj4mW.net]
JAVA() がインターフェースにメソッドの実装を書ける程度には
忌みがあるだろう
だが普通はしない

947 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 13:06:47.93 ID:teewvH1C.net]
インターフェイスクラスなんか用意せずにA<Data>,B<Data>で直接よび合えばいいじゃん
プログラミングにおいては直接的・機能的な設計・実装をさまたげる個人的な価値観や美意識は有害なだけで不要でしょ

948 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 16:52:35.16 ID:8Cig6QUM.net]
>>930
読んで「は?」と思ったから調べたけど相互参照NG説のソースが見つけられなかった

迷信?それとも根拠ある主張?

949 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 17:02:40.96 ID:rdn2uojJ.net]
とりあえず>>929>>939が開いた括弧をとじるよ
};
};
};
};

950 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 18:02:23.96 ID:h+qk3VAa.net]
>>942
相互参照してるとオブジェクト破棄の責任が決まらず、リソースリークや二重破棄を引き起こす可能性がある。
もちろん片方をshared_ptrにしてもう片方をweak_ptrにするなどして所有なのか只の参照なのかを明確にすれば安全に相互参照はできる。相互参照というより相互に所有するのが問題だったね、申し訳ない。

951 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 18:23:55.67 ID:8Cig6QUM.net]
>>944
要するにC++の言語仕様上の問題に過ぎず、オブジェクト指向一般の話では相互参照や循環参照は問題ないってことかぁ?

952 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 18:50:26.91 ID:h+qk3VAa.net]
>>945
他の言語はあまり詳しく知らないけど、GCが用意されていたり、参照を基本としたりする他の言語では問題は小さいだろう



953 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 18:59:12.33 ID:tpgdbbWH.net]
>>945
適切に設計すれば問題はないが、注意しろってはなしだろ

954 名前:929 mailto:sage [2014/04/04(金) 19:17:02.12 ID:ziFJe0J7.net]
今帰宅しました
皆さんレスありがとうございます

>>942
相互参照NGの理由はジョン・ラコスの「大規模C++ソフトウェアデザイン」で書かれています
確か
・コンパイル・リンク時のコストが増大すること
・お互いに単独で使用できないので単体試験ができない
等が理由に挙げられていたと思います

>>943
ありがとうございます^^

>>930
概念的に独立したクラスが相互参照しているわけではなく、
Graph,Edge,Vertexみたいな感じの関係のクラスなんです
例えがパッと浮かばなかったので>939ではレス返せませんでした、すみません

955 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 19:34:13.91 ID:h+qk3VAa.net]
>>948
>>929,>>939について、Bの持つデータ型が複数あるというが、単一のAが所有するBはそれぞれ同じ型のデータを持つのか?そうならばIAやAをテンプレートにして、A<T>::BやA<U>::BをA<T>やA<U>がそれぞれ所有するのがいいだろう。
単一のAが複数の型のBを所有する場合にはもう少し複雑な機構が要求されるだろう

あと、生ポインタを使うと意図がわかりづらくなるので、適切なスマートポインタやクラスを用いるべき

956 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 19:39:28.67 ID:eu/rYsXw.net]
利用だけならナマポ使っちゃうな
インスタンス管理でどっちも死なないことが分かってるし

957 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 [2014/04/04(金) 23:43:32.61 ID:CAL3SSDr.net]
質問です。
inline const char *func(void){
static const char *s = "…ものすごく巨大なデータ…";
return s;
}
複数のコンパイル単位から参照される巨大なデータを
うまくヘッダに埋め込むにはどうすればいいか?

958 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 23:49:30.08 ID:wXNGFrYS.net]
// huge_data.h
extern const char* const s;

// huge_data.cpp
#include "huge_data.h"
const char* const s = "...huge data...";

こういうこと?

959 名前:デフォルトの名無しさん [2014/04/04(金) 23:53:22.93 ID:CAL3SSDr.net]
.cpp不要で重複なしにしたいらしいです。

960 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 00:09:53.25 ID:NnouwwX7.net]
__declspec(selectany)

961 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 00:10:33.60 ID:N4PVE6y4.net]
0xcc.net/blog/archives/000076.html
これ使ってexternすれば

962 名前:929 mailto:sage [2014/04/05(土) 00:11:02.58 ID:HMLu+RLn.net]
>>949
単一のAが所有するBは全部同じ型です
AがBの生成、破棄を担ってて、生存期間も同じなのでナマポのままでいきます

とりあえず色々ご意見頂けたので質問は閉じさせて頂きます
どうもありがとうございました!


あ、>948の補足です
相互(循環含む)参照しないことのメリットは依存性に明確な順序をつけることが可能なことです
A→Bを(Bが変更されるとAのコンパイルが必要)を意味するとします

A←→BとかA→B→C→A→…とかになっているとそれらのクラスをまとめて試験しなければなりません
A→B→C→DとなっていればDを試験して十分信頼性が高くなったらCを試験して、と段階的にいけるということです



963 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/05(土) 01:05:19.01 ID:kCbCwa1D.net]
ポータブルでスマートな解決策はC++にはないでFA。

ありがとうございました。

964 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:18:58.03 ID:Q7PCNbm7.net]
>>957
それって前にも上がってたやつじゃダメなの?

template <int N>
struct banzai {
static const char* s_char;
};

template <int N>
const char* banzai<N>::s_char = "abcdefghijklmnopqrstuvwxyz";

inline const char* s_char()
{
return banzai<425>::s_char;
}

965 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:25:12.80 ID:DYmjPU4E.net]
>>951
そのコードで何か問題あるの?やりたいことができてるように見えるんだけど。

966 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:37:41.29 ID:kCbCwa1D.net]
>>959
ものすごく巨大なデータが何個も作られたら嫌だろ

967 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:45:32.24 ID:DYmjPU4E.net]
>>960
そんなことにはならないよ。
7.1.2 [dcl.fct.spec] p4
> ... A string literal in the body of an extern inline function is the
> same object in different translation units. ...

968 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:50:56.07 ID:YrLzJmoN.net]
普通のSingleton

969 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:57:47.22 ID:Q7PCNbm7.net]
>>962
>>953

970 名前:KAC mailto:sage [2014/04/05(土) 02:06:26.69 ID:Dr+e6snh.net]
問題の出し方がいまいちよくわからんね。
たぶん、#include使って複数から参照するって話でもしたいのかと。

971 名前:デフォルトの名無しさん [2014/04/05(土) 02:06:28.48 ID:kCbCwa1D.net]
>>961
それはC++0xからだっけ?

972 名前:KAC mailto:sage [2014/04/05(土) 02:07:17.21 ID:Dr+e6snh.net]
安価忘れた orz



973 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 03:13:14.83 ID:DYmjPU4E.net]
>>965
いや、C++98からずっと。

974 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 04:04:26.33 ID:Ir5lnMtW.net]
>>958
特定の意味を持つ変数を整数で識別するなよ
お前はローカル変数もをv001,v002,v003…にしてるのか?

>>964
ヘッダに入れたいと言ってるんだから
コンパイル速度の話でなくて複数翻訳単位で
実体を同じにするという話だろjk
(すでになってるが)

975 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/05(土) 05:21:00.49 ID:kCbCwa1D.net]
俺のMinGW g++がおかしいのか? 同じデータをいくつも埋め込むんだが

976 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/04/05(土) 06:50:35.55 ID:ILQmFswz.net]
>>969
externが足りないからじゃなくて?

ISO/IEC 14882:1998 7.1.2 段落4
A static local variable in an extern inline function always refers to the same object.

extern inlineの部分はタイプライターっぽいフォント。

977 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 07:21:57.84 ID:Lxf79fPB.net]
ものすごく巨大なデータをヘッダに書かなければならない自分をまずどうにかしろよ

978 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 07:26:30.69 ID:4p3tjfYN.net]
externが要るのか知らんかった
・extern inline内の静的変数は実体が同じ
・extern inline内の文字列リテラルは実体が同じ
前者はsが同じアドレスになって
後者は"...huge data..."が同じアドレスになる

関数がexternならsにstaticは要らないということか

979 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 07:34:17.87 ID:eKUnQEXz.net]
関数がexternでなくても
inlineでなくても
sにstaticがいる筈がない

980 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 07:47:12.92 ID:rrGengiU.net]
俺C/C++はよくわからんが、
// huge_data.h
extern const char* const s;

// huge_data.cpp, huge_data.hはインクルードしないでグローバルで
const char* const s = "...huge data...";

// sを使うhuge_data.cpp以外の.cppでは
huge_data.hをインクルード

これでは駄目なのか?

981 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:04:10.88 ID:4p3tjfYN.net]
>>974
質問者の意図は「何とかしてヘッダだけで済ませる方法はないか」
なのだから、その回答では駄目だな

982 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 [2014/04/05(土) 08:17:35.23 ID:kCbCwa1D.net]
VC2008,BCC32の場合はexternを付けなくても単一になった。
g++の場合はextern付けても単一化されなかった。
g++の問題みたいですね。



983 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:23:09.04 ID:cxjx9B8n.net]
↑これが最後のファイナルアンサー

984 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:46:29.27 ID:rrGengiU.net]
>>976
付けなくても単一になったって、
仕様上はextern付けないと駄目なんだろ。VC/BCCは警告ぐらい出るようにしないと駄目だろ

985 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:48:36.70 ID:e3mydc3l.net]
↑論理的思考の出来ない馬鹿

986 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:52:58.41 ID:kCbCwa1D.net]
bug-g++@prep.ai.mit.eduにバグレポート送りました

987 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:54:16.09 ID:e3mydc3l.net]
ところでさ
static inline void f();
extern inline int & f() {
 static int var;
 return var;
}
っていう関数fは内部リンケージを持ちながらも
varは翻訳単位間で同一になっちゃうの?
おかしくね?

988 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 09:01:48.91 ID:Q7PCNbm7.net]
そのうちまた、「ヘッダはコンパイラが提供するものなのであなたが作らないでください」厨が現われる。

989 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 09:22:37.95 ID:S+nT1w4a.net]
煽るなよ
一応規格ではそういう定義なんだから

990 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 10:40:34.53 ID:90I2C7qj.net]
今時g++なんて使う奴は情弱

991 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 11:10:50.62 ID:ptPAYM2R.net]
今はh++がきてます

992 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 11:24:36.69 ID:4p3tjfYN.net]
次スレ
C++相談室 part112
toro.2ch.net/test/read.cgi/tech/1396656048/



993 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 12:39:58.92 ID:jmoC0q2p.net]
>>986
おつ

994 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/05(土) 14:04:18.14 ID:pKk9GxNe.net]
clang++はwindowsで使えないからなあ。。。

995 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 14:16:06.85 ID:p10Tb89F.net]
時代遅れ

996 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 14:18:56.48 ID:OrTtrRA7.net]
windowsはまだまだ現役でしょ

997 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 16:24:57.59 ID:LokGB3M7.net]
勉強用としてはgccのヘンテコな仕様よりはVC++の方がマシ
clangが使えるならclang一択

998 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:21:33.76 ID:x1RB96gi.net]
gccがヘンテコとか、何を持ってそう言っているのかすごい気になる

999 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:27:40.68 ID:IFpoXzod.net]
気になるというか、凄く臭い立つしったか臭があるだけだがw
偉大なるgccを批判できるような力量もってるやつなんて、この板にはいない。

1000 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 20:12:49.24 ID:RDsNMK1o.net]
sun os 4.x でgccの野良ビルドは大変でした。

1001 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 20:39:33.53 ID:anSZmmIR.net]
某虫の記事であったけどvariable length array in structureとか勝手に拡張すんなってことだろ
批判されても仕方ない

1002 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 20:39:37.54 ID:EOtAE3K1.net]
gccが駄目でclangの普及が加速しているんだろ
長い間の繰り返し建て増しで劣化したって感じじゃないのか
建て増しって言えばC++だが



1003 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:03:16.44 ID:x1RB96gi.net]
>>995
でもそれC++14で規格になるんでしょ(Linuxのカーネルソースで使われてるし・・・とか江添さん言ってた気がする)
gccの内部の作りが複雑怪奇なのはそうかもしれんが、仕様がヘンテコってのはやっぱりおかしい

1004 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:05:26.99 ID:3z3TJ4eu.net]
仕様が〜実装が〜って言ってると自分が満たされるんだろうよ。
ほっとうこうず。たぶんそいつそれ以上いじっても何一つ有益なもん出てこない。

1005 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:20:07.43 ID:anSZmmIR.net]
勉強用って話だから初学者が拡張と知らずにその記法を覚えたらどうすんだってことだろ

1006 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:25:19.87 ID:p10Tb89F.net]
>>997
なってねーよハゲ

1007 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

1008 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






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

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

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