1 名前:デフォルトの名無しさん [2015/08/31(月) 18:19:04.13 ID:NE3NvROE.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part118 peace.2ch.net/test/read.cgi/tech/1435970316/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net peace.2ch.net/test/read.cgi/tech/1439849418/ 次期規格C++1zはこちら C++14/C++1z 20 peace.2ch.net/test/read.cgi/tech/1410382924/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/
49 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 22:07:22.53 ID:AdYeXoWK.net] 昔ながらのMVC開発のモデルなら データ構造をメンバーとして持つ感じじゃないか 最近のなんやらかんやらは知らんが
50 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 22:09:34.18 ID:AdYeXoWK.net] つかMVCってC++でやることってあるの? 昔Javaを使ったWebの開発現場では煩い位に聞いたけど
51 名前:デフォルトの名無しさん mailto:sage [2015/09/01(火) 22:14:30.02 ID:nXuOkFi0.net] 特定の文脈でしか通じない用語を 断り無しに連発するのは馬鹿の特徴
52 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 00:21:31.48 ID:TZYcxUIB.net] チンピラの群れがお互いに喧嘩を売って歩くスレ
53 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 08:20:41.73 ID:8HjhIrCM.net] お互い売るけど、どちらも買わない
54 名前:デフォルトの名無しさん [2015/09/02(水) 11:40:01.60 ID:3Er4L3kb.net] #include<iterator> #include<fstream> #include<iostream> int main(){ std::ifstream f{"abc"}; std::istream_iterator<unsigned char> i{f}; for(auto a=0;a<5;++a) std::cout<<" "<<std::hex<<static_cast<int>(*i++); return 0; } このコードでabcという名前の読み込むファイルの中に16進数で0Cがあると なぜか表示されなかったり0が2個になったりします 何がわるいのですか? g++とclang++で試しました
55 名前:デフォルトの名無しさん [2015/09/02(水) 11:52:12.56 ID:3Er4L3kb.net] 自己解決しました
56 名前:デフォルトの名無しさん [2015/09/02(水) 12:00:08.37 ID:3Er4L3kb.net] 直ったと思ったら勘違いでした 教えてください
57 名前:デフォルトの名無しさん [2015/09/02(水) 12:17:49.56 ID:3Er4L3kb.net] こんどは直りました ありがとうございます
58 名前:デフォルトの名無しさん [2015/09/02(水) 12:19:48.06 ID:kvoheval.net] どういたしまして
59 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:22:36.42 ID:RN6F+W1d.net] >>54 istream_iteratorは>>演算子によって文字を読取るため、0x0cのようなホワイトスペース文字は スキップする こいつを読み取らせるにはバイナリ入出力を使う #include <fstream> #include <iostream> #include <iomanip> int main() { std::ifstream f {"abc.txt", std::ios::in | std::ios::binary}; int x; // std::istream_iterator<unsigned char> i {f}; // for (auto a = 0; a < 5; ++a) // std::cout << " " << std::hex << static_cast<int>(*i++); while ((x = f.get()) != EOF) { std::cout << " " << std::setw(2) << std::setfill('0') << std::hex << x; } }
60 名前:デフォルトの名無しさん [2015/09/02(水) 12:25:51.06 ID:3Er4L3kb.net] unsetf(std::ios::skipws)でできましたよ
61 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:26:31.09 ID:RN6F+W1d.net] >>58 同じことだな
62 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:29:04.68 ID:RN6F+W1d.net] 他の方法としてはstd::noskipwsをその都度指定するか www.cplusplus.com/reference/ios/skipws/
63 名前:デフォルトの名無しさん [2015/09/02(水) 12:29:52.92 ID:kvoheval.net] や っ ぱ ス ト リ ー ム は ク ソ だ わ
64 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:34:52.18 ID:RN6F+W1d.net] 慣れの問題だろ istream_iteratorが>>演算子を内部で使ってるとちゃんと書いてある本を持ってれば分かる話
65 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 12:37:36.59 ID:pfz+JPDH.net] >>47 ありがとう モデルってビジネスロジック書くところだと勘違いしてた もろにデータ構造そのものを指すんだな
66 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 13:03:07.04 ID:spisOxh2.net] >>62 はどういう意味ですか?
67 名前:デフォルトの名無しさん [2015/09/02(水) 13:39:30.67 ID:3Er4L3kb.net] <<を使わないために istreambuf_iteratorを使いたいんですけど ifstreamのrdbuf()をイテレーターの初期化にしてもできませんでした
68 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 19:01:21.83 ID:I203tbc8.net] 慣れの問題と思ってる奴はバカ iostreamが糞なことに気づかないようではどうしようもない
69 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:13:37.89 ID:+ga1UiZL.net] すいません初心者なんですけど クラステンプレート質問させてください 例えば templat e<class Type> class A { Type a; public: A() : Type() {}; もしくは A(Type x = Type()) {}; } みたいなイニシャライザやデフォルトテンプレート引数の場所に出てくる Type() <- 括弧の中に何も入ってない の意味を教えて下さい 本読んでも唐突に出てきてネット調べてもわからないです 両者が同じものなのか違うものかもわかんないです
70 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:14:35.25 ID:+ga1UiZL.net] ;の付け方グチャグチャだったけどそこはスルーしてください…
71 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:36:41.71 ID:4+szYIhP.net] >>67 コンストラクタ呼び出し
72 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:42:45.88 ID:ygSRnlxE.net] >>67 Type()はデフォルト初期化だよ TypeがPODならゼロ初期化されるし、そうじゃなければデフォルトコンストラクトされる
73 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:45:27.50 ID:ygSRnlxE.net] >>67 には ;以外にも色々おかしいところはあるけどType()の意味は上の通り
74 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 20:54:19.65 ID:+ga1UiZL.net] 回答有難うございます いただいた回答で意味が判りましたありがとうございます 自分で判った間違いは直しました、なんとなく気持ち悪いので template <class Type> class A { Type a; public: A() : a(Type()) {} もしくは A(Type x = Type()) {} }; そもそも初心者スレで聞くべきだったかもしれませんすいませんありがとうございます
75 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 21:52:05.05 ID:m/gpmXab.net] なんでもいいが、俺なら template <class Type> class A { private: Type _a; public: A() : _a() {} }; と書く Typeのコンストラクタを呼ぶというより、_aをデフォルトコンストラクタで初期化しといたやでという意味で書いてるから。 >>72 の書き方だとコピーコンストラクタを呼ぶことになるのでは?
76 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 22:18:06.66 ID:HOyUHIr6.net] >>70 どうしてそう息を吸って吐くようにウソが出てくるんだ?
77 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 22:47:41.96 ID:1DlJs2CJ.net] >>73 コンストラクタを呼んじゃいけないという おまえの脳内前提で質問されても
78 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 23:14:30.27 ID:ygSRnlxE.net] >>74 具体的にどうぞ どう言えば正しいのかまで それが出来ないならお前はクズの中のクズ
79 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 23:19:25.72 ID:HOyUHIr6.net] >>76 規格の定義と異なる嘘を並べておいて随分と横柄な態度だな 仕様を読み間違えたとかじゃなくて知らないくせにテキトー抜かすのは 止めた方がいいぞ
80 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 23:20:58.11 ID:ygSRnlxE.net] >>77 で?
81 名前:デフォルトの名無しさん mailto:sage [2015/09/02(水) 23:34:08.05 ID:0+j6o+Dn.net] >>78 レス止めたほうがいいってよ(´・ω・`)
82 名前:デフォルトの名無しさん [2015/09/02(水) 23:42:02.07 ID:urmqHodw.net] 大きく出る割に話がピーマン
83 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 00:34:33.32 ID:iQnjIkb4.net] 具体的には説明できないがお前は
84 名前:間違っている!!! [] [ここ壊れてます]
85 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 00:42:05.98 ID:CZJfW2V/.net] >>73 >>72 だとxvalueでムーブコンストラクタが呼ばれるのでは?……と思ったけど、必ずしもムーブコンストラクタが定義されてるわけではない上に、デストラクタ明示したらムーブセマンティクスも明示しないと削除されるか(推奨であって規格ではない)
86 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 00:45:59.94 ID:SvUuACZU.net] 荒れてるところ恐縮ですが質問してもいいですか? class A { B& b; } class B { A& a; } こんなふうな相互に参照を持つことってできるのですか? ポインタ使う以外に道はないですか?
87 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 00:50:37.56 ID:fKKhgssi.net] 指摘した後に勘違いと気づいたパターン
88 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 01:12:32.53 ID:hDY8eKzg.net] >>83 class c { class b; class a { b &b_ = *new b(); }; class b { a &a_ = *new a(); }; }; これで一応動くけど、どうすんのこれ
89 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 01:16:38.14 ID:fKKhgssi.net] それ相互参照じゃない というかムリ
90 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 02:36:12.57 ID:VxVmaHFN.net] 仮引数をstd::stringへのconst参照にしてconst char*の文字列("...")を渡す動作はC++標準ですか?
91 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 03:11:20.88 ID:CZJfW2V/.net] 標準。 プログラミング言語C++第4版の関数多重定義解決規則をみよ。 適合できない引数を暗黙変換できるならする。 そのさいに引数を1つとるコンストラクタにも入れ子式に適用される。
92 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 03:20:02.37 ID:fKKhgssi.net] 暗黙変換はされるのは1回だけだよ
93 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 04:07:13.75 ID:SvUuACZU.net] >>85 そんな手がありましたか でもdeleteは自分でしなきゃダメですよね >>86 やはり、参照を使うのは無理ですよね 「相互参照」でググってもポインタを使う例ばかりですし ありがとうです
94 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 05:34:06.26 ID:D704J011.net] >>83 ほれ ideone.com/9VuNcJ
95 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 07:13:38.72 ID:1aBHaasU.net] プログラミング言語C++第4版というのはISO/IEC 14882:2014のことですか?
96 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 08:22:08.15 ID:ZCmiwbzV.net] あれやこれや言われてる>>72 の正しい解答教えてくれんと僕眠れない
97 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 09:36:59.35 ID:SPzlieDS.net] 組み込みでc++を使用しているのですが、 C++の標準ライブラリのcoutや、vectorを使用したいと思っています。 そのためには何らかのドライバの役割を果たすソースが必要ではないかと考えています。 どのようにすれば使用できるようになるのでしょうか。
98 名前:デフォルトの名無しさん [2015/09/03(木) 09:56:07.26 ID:gfhZ4+hm.net] 動作するSTLソース
99 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 10:17:18.79 ID:PXwT0hDa.net] ソース一覧 www.bulldog.co.jp/ ブルドックソース株式会社 東京都 www.kagome.co.jp/ カゴメ株式会社 愛知県 www.otafuku.co.jp/ オタフクソース株式会社 広島県 www.ikari-s.co.jp/ イカリソース株式会社 大阪府 www.kikkoman.co.jp/ キッコーマン株式会社 千葉県 www.oliversauce.com/ オリバーソース株式会社 兵庫県 www.sky-net.or.jp/toshi/ カープソース 広島県 www.maruki-su.com/ 株式会社 川上酢店 愛知県 www.kozima.co.jp/ 小島食品製造株式会社 愛知県 www.komi.co.jp/ コーミ株式会社 愛知県 www.sankyohikari.co.jp/ サンキョーヒカリ 愛知県 www.junmaru.co.jp/ 株式会社 純正食品マルシマ 広島県 www.papaya-sauce.co.jp/ パパヤソース本舗 大洋産業株式会社 京都府 www.takahashisauce.com/ 高橋ソース株式会社 埼玉県 www.choko.co.jp/ チョーコー醤油株式会社 長崎県 www.timelyhit.ne.jp/ajiyoko/shop/sauce/sauce1.htm 阪神ソース株式会社 兵庫県 www.kyoto-thinking.co.jp/hirota/ 京風味ソース本舗 蛇ノ目食品廣田徳七商店 京都 www.optic.or.jp/com/fujiisauce/fujiisauce.html 有限会社 藤井ソース工場 岡山県 www2.neweb.ne.jp/wd/hikari/ ヒカリ食品 徳島県 www.hat.hi-ho.ne.jp/aokia/ 下北沢ビレッジソース 丸寿食品工業株式会社 東京都 www.yamayashokuhin.co.jp/ 山屋食品株式会社 東京都 brothersauce.com/ ブラザーソース森彌食品工業株式会社 www.asahi.co.jp/you/t20011026.html 神戸地ソース物語 【関連団体】 www.maff.go.jp/koueki/sougou/35/35.htm (社)日本ソース工業会 www.japan-tomato.or.jp/ 社団法人 全国トマト工業会 www.soysauce.or.jp/ 日本醤油協会
100 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 10:35:36.61 ID:Zp2ZXSAW.net] >>94 とりあえず試してみて、そのまま使えなようなら、コンパイラのマニュアルを読む。
101 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 10:57:30.22 ID:3MKID8ns.net] >>97 __dso_handleがどうのこうのでエラーが出ます コンパイラはg++です。 マニュアルのインデックスをざっと見てみたのですが セクションが多すぎて該当部分がわかりませんでした
102 名前:デフォルトの名無しさん [2015/09/03(木) 11:17:42.50 ID:qqXcw9HH.net] 組み込みでcoutなんかいるのか? coutがすぐ使えないってことはベアメタルだよな
103 名前:デフォルトの名無しさん [2015/09/03(木) 11:22:18.14 ID:BYrhbrh5.net] いるかどうかは問題にしてない
104 名前:デフォルトの名無しさん [2015/09/03(木) 11:23:37.79 ID:SPzlieDS.net] >>99 OSでnewlibのサポートはあるのですが C++ライブラリのサポートがないようなので何とかして使えるようにならないかと coutは簡単にデバッグ用メッセージをコンソールに出力できたらいいなと newlibではprintfが使用できます。
105 名前:デフォルトの名無しさん [2015/09/03(木) 11:33:23.42 ID:gfhZ4+hm.net] 標準ライブラリとSTLは別物。 どちらもビルド済みがコンパイラと同包されてるケースが多いが。 無ければ自らビルドするなりして組み込まないと動作するわけない。
106 名前:デフォルトの名無しさん [2015/09/03(木) 11:44:20.68 ID:gfhZ4+hm.net] newlib STLでググった結果。 AVR 8ビットマイクロコントローラでSTLを動かす話かと。 AVR toolchain with GCC 4.8.1 and C++ STL support - Antoni Buszta Building compiler Building C Standard Library Patch GCC sources Building C++ Standard Library and other tools antoni.buszta.info/2013/07/18/avr-toolchain-with-gcc-4-8-1-and-c-stl-support/
107 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 12:03:05.07 ID:UXgFNAqG.net] 最近は、8bitマイコンでも、C++が動くのか? びっくりした
108 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 12:09:28.35 ID:SvUuACZU.net] >>91 ありがとうございます unionで何らかのポインタ(void*でなくてもよさげ?)をnull初期化してやれば、 参照(をメンバに持つクラス)をメンバに持つ場合でもいけるわけですね 配置newでthisを渡すというのも初めて知りました 自分にはちょっと技巧的すぎるやり方ですが、とても勉強になりました
109 名前:デフォルトの名無しさん [2015/09/03(木) 12:16:39.79 ID:gfhZ4+hm.net] 軽量なコード、システムを選択していけばいけるんじゃないの?やったことはない。 uClibc stl でググった結果。 uClibc++ C++ library cxx.uclibc.org/status.html Small scale C++ STL for embedded use www.exactcode.com/site/open_source/embeddedstl/ Embedded C++ - Wikipedia 1990年代後半、組み込み用途への適用を目指して、肥大化したC++の仕様を必要最低限のものに絞り込んだサブセットが考案された。 一般的には、Embedded C++を用いた場合、C++よりプログラムをコンパクトにできる傾向がある。
110 名前:デフォルトの名無しさん [2015/09/03(木) 12:43:32.79 ID:SPzlieDS.net] >>102 なるほど、iostreamは標準ライブラリでvectorはSTLになるのですね ちなみに組み込み用(ARM)用のstdlibc++.aは存在します その中で"objdump -C -t"してあげるとcoutのシンボルは存在しますがvectorなどは確かに見つかりませんね >>103 どこでcoutの出力先やらメモリの動的確保の方法を指定しているのかがわからないですね >>106 こんなのがあるんですね
111 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 12:56:42.10 ID:hDY8eKzg.net] 8-bitマイコンってメモリ空間256バイトではないよね なにをもって8-bitなの?
112 名前:デフォルトの名無しさん [2015/09/03(木) 13:20:30.95 ID:gfhZ4+hm.net] STLといっても最終的にはCPUの基本命令まで翻訳されるわけで。 STLの実装・翻訳の過程で無駄がないとすると、STLを使わないものと遜色はないはず。 メモリや速度で難があるのは無駄があるだけ。
113 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 14:47:23.71 ID:UXgFNAqG.net] >>107 coutは標準出力。 ファイル・ディスクリプタ、0:標準入力(stdin)、 1:標準出力(stdout)、2:標準エラー(stderr) メモリの動的確保は、reallocか、 free + malloc >>108 CPUの命令長が、8bit
114 名前:デフォルトの名無しさん [2015/09/03(木) 16:50:12.14 ID:rBNlqiiW.net] >>110 確かにそれは上位のレイヤーではそうなのですが 下位層を意識してみると 内部のコードを読んだことないので自分の中での理解なのですが Linuxの場合 例えばprintfは文字列を処理してから fd:1を引数としたwriteシステムコールで 文字列を出力しているなどしてるのかと思っています。 しかし、windowsでは別の文字列出力方法があると思います。 その環境ごとの文字列出力法の差異をどこで吸収するのか気になっています。 Newlibはおそらくwrite_r等と言う関数を定義することで環境の差異を吸収しているように見えました。
115 名前:デフォルトの名無しさん [2015/09/03(木) 18:06:39.67 ID:zWhDxOK5.net] std::tuple< std::tuple<std::tuple.... *,int>> *, int > 自分自身のポインターを要素に持つtupleって出来ないんですか?
116 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 18:23:10.49 ID:hPxxKfzL.net] >>93 「Type()」はデフォルト初期化でなく値初期化 値初期化の過程でゼロ初期化されるかどうかはルールが複雑なので ISO/IEC 14882:2014の8.5を読めとしか言えない ただPODかどうかは関係ない 例えば struct X {int a; protected: int b;}; はPODではないけれどゼロ初期化される
117 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 18:51:40.41 ID:XvCyn3hF.net] JAVAといっても最終的にはCPUの基本命令まで翻訳されるわけで。 JAVAの実装・翻訳の過程で無駄がないとすると、JAVAを使わないものと遜色はないはず。 メモリや速度で難があるのは無駄があるだけ。
118 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 19:17:25.38 ID:G+oloE/W.net] >>112 template<typename T> class hoge{}; hoge<hoge<int>*> n_inst; ??????
119 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/03(木) 19:21:44.93 ID:un01NHO0.net] 合わせ鏡みたいなタプル? できるわけないだろ
120 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 19:27:06.77 ID:G+oloE/W.net] template<typename T, typename U> class hoge{}; hoge<hoge<int, int>*, int> tu_inst; 意味が分からん。それとも template<typename T> class hoge{ public: T* m_p; }; hoge<int> n_inst; n_inst.m_p;//int*型 普通にこうしたいだけ?
121 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 19:29:10.11 ID:G+oloE/W.net] ていうか、論理が分からないのか、循環参照したがるんだよな 循環参照は不定なだけ
122 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 20:34:41.66 ID:YegStso1.net] むしろ>>112 の説明で何がわからないのかがわからない。 出来ないとは思うけど
123 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 20:43:03.17 ID:G+oloE/W.net] >>119 int hogeeeeeee(int i){return hogeeeeeee(i);} void main(){hogeeeeeee(1); return;} これが戻り値が不定にならないと思うのと同じ
124 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 20:44:02.06 ID:fKKhgssi.net] >>91 おお、知らなかった C++11でできるようになってたんだな
125 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 20:50:29.42 ID:G+oloE/W.net] テンプレートは動的でなく静的だからね TempClass< float, 6 > test1; // OK TempClass< char, items++ > test2; // Error, second parameter // must be constant.
126 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 21:03:10.32 ID:D704J011.net] ちょっと考えたけど使い道無さそうだわ ideone.com/hnYBeO
127 名前:デフォルトの名無しさん [2015/09/03(木) 21:04:11.91 ID:yKj1FtgQ.net] #include <iostream> #include<tuple> using namespace std; int main() { using A=std::tuple<B*,int>; using B=std::tuple<int,A*>; return 0; } どうやってこのエラーを取り除けるのでしょうか?
128 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 21:08:45.94 ID:fKKhgssi.net] >>124 それは規格に無理と書いてある
129 名前:デフォルトの名無しさん [2015/09/03(木) 21:14:36.19 ID:yKj1FtgQ.net] むりなんすか ありがとうございました
130 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 21:16:27.91 ID:G+oloE/W.net] >>124 テンプレートは生成が静的だから完全解決できないと生成できません プログラムコードも静的だから完全解決できないこういうコードはできません int hoge(int i){return hage(i);} int hage(int i){return hoge(i);} void main(){int ret=hoge(1); return;} hogeかhageかでif分岐などで解決しないと実行できません で>>124 みたいなテンプレートは↑こういう風に解釈されます
131 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 21:31:53.50 ID:fKKhgssi.net] >>126 14.5.7 >The type-id in an alias template declaration shall not refer to >the alias template being declared. The type produced by an alias >template specialization shall not directly or indirectly make use of >that specialization. 要するにテンプレートの再帰型は直接であれ間接であれ使えない
132 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 21:47:39.21 ID:G+oloE/W.net] どういうのがやりたいのかわからんけど、↓でそれの何ができないの? class base{ public: base(base& n){m_p=&n;} base* m_p; }; class A : public base{ public: A(A& n) : base(n){;} }; class B : public base{ public: B(B& n) : base(n){;} };
133 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 22:00:58.39 ID:ujbBBsKz.net] コテハン=キチ○イ の法則
134 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:06:39.08 ID:G+oloE/W.net] >>129 でA←→Bの相互通信がしたいなら messengerクラスを独立に作ればいいだけ
135 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:09:18.49 ID:G+oloE/W.net] base* m_p; つかこれはthisポインタだな
136 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:12:34.19 ID:G+oloE/W.net] 要するにクラス参照の持ち合いなんて baseクラスからAとBを派生させて 独立なメッセージクラスで通信すりゃあいいんだよ
137 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:19:52.99 ID:G+oloE/W.net] abstract factoryパターンだろ
138 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 22:22:17.51 ID:hvDmk3I7.net] この馬鹿はさっきから何言ってるの? ビョーキなの?
139 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 22:39:04.34 ID:G+oloE/W.net] 要するにAとBのクラス参照の持ち合いなんて baseクラスからAとBを派生させて 独立なメッセージクラスで通信すりゃあいいんだよ デザインパターンではabstract factoryパターンだろ そのまんまだよ
140 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 23:14:36.34 ID:fKKhgssi.net] なんのこっちゃ
141 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 23:18:52.70 ID:yR6wfki7.net] 1) 釣りである 2) 知ったかしなきゃ死ぬ病気である 3) 本屋にくるおしゃべり天使みたいにスレでもうわごとレスを止められない 4) 本人はまじめだが知能がいちじるしく低い
142 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 23:24:43.23 ID:G+oloE/W.net] class base{ public: int m_val; base(int i):m_val(i){;} virtual int func(int i){return i;} }; class add:public base{ public: int func(int i){return m_val+i;} }; class sub:public base{ public: int func(int i){return m_val-i;} }; base *p,*q;//abstract factoryパターン int r;//メッセージクラス p=new add(21); r=p->func(7); q=new sub(r); r=q->func(7);
143 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 23:34:56.29 ID:G+oloE/W.net] class base{ public: int m_val; base(int i=0):m_val(i){;} virtual int func(int i=0){return i;} }; class add:public base{ public: int func(int i=0){return m_val+i;} }; class sub:public base{ public: int func(int i=0){return m_val-i;} }; base *p,*q;//abstract factoryパターン int r;//メッセージクラス p=new add(21); r=p->func(7); q=new sub(r); r=q->func(7); intを任意のクラスにしたらなんか色々出来そうだろ
144 名前:NAS6 ◆n3AmnVhjwc [2015/09/03(木) 23:41:00.21 ID:G+oloE/W.net] ありゃ、コンストラクタ忘れた class base{ public: int m_val; base(int& i=0):m_val(i){;} virtual int func(int i=0){return i;} }; class add:public base{ public: add(int& i=0):base(i){;} int func(int i=0){return m_val+i;} }; class sub:public base{ public: sub(int& i=0):base(i){;} int func(int i=0){return m_val-i;} }; base *p,*q;//abstract factoryパターン int r;//メッセージクラス p=new add(21); r=p->func(7); q=new sub(r); r=q->func(7); intを任意のクラスにしたらなんか色々出来そうだろ
145 名前:デフォルトの名無しさん mailto:sage [2015/09/03(木) 23:56:33.17 ID:fKKhgssi.net] 薬飲んだらすぐ寝ないと駄目だぞ
146 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 00:38:45.05 ID:ye/5uETN.net] >>112 これでどう? #include <tuple> struct S; typedef std::tuple<S> TS; struct S { TS* p; }; TS loop{S{&loop}};
147 名前:デフォルトの名無しさん mailto:sage [2015/09/04(金) 00:53:27.48 ID:ye/5uETN.net] >>83 なんか変な回答ついてるけど、ふつうに↓でコンパイル通るよ。 class B; class A { B& b; }; class B { A& a; };
148 名前:デフォルトの名無しさん [2015/09/04(金) 01:15:43.42 ID:IG+8/rPl.net] 循環【参照】か
149 名前:NAS6 ◆n3AmnVhjwc [2015/09/04(金) 01:16:03.14 ID:tzKKrHnI.net] >>144 それだと、どちらかを先に完全確定する必要があるんだけど まぁ、とりあえずデフォルトコンストラクタでもいいけど 実体作った後でもいいけど、A,Bはどんな状態遷移すると思う? class B; class A { int m_val; B& m_b; A(){;} A(B& b):m_b(b){;} }; class B { int m_val; A& m_a; B(){;} B(A& a):m_a(a){;} }; A a(); B b(a); a.m_b=b; これで、マルチスレッド環境だったりしたら、かわいそうなことに・・・