- 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/
- 794 名前:デフォルトの名無しさん [2015/10/03(土) 20:27:19.39 ID:25KCQVnt.net]
- ハッカーの彼女ってペンギンだろ
- 795 名前:デフォルトの名無しさん [2015/10/03(土) 20:28:46.01 ID:HRif353B.net]
- クラッカーという言葉を作って、犯人はクラッカーだと言うようになった。
- 796 名前:デフォルトの名無しさん [2015/10/03(土) 20:30:44.43 ID:HRif353B.net]
- 電話を無料でかける装置を50ドルで売った。
これは良く売れた。 マンハッタンのビジネスマンが一日に50台注文することもあった。 この利益でいくつかのフリーソフトウェアが完成した。
- 797 名前:デフォルトの名無しさん [2015/10/03(土) 21:34:06.93 ID:GmUX5JOa.net]
- 2つの矩形(XYWH)を覆う四角形Z(XYWHR)を求めるにはどのような計算式を書けばいいですか?
- 798 名前:デフォルトの名無しさん [2015/10/03(土) 21:40:46.15 ID:8iRLWTDj.net]
- std:::min と std::max を使うと簡単だよ
- 799 名前:デフォルトの名無しさん [2015/10/03(土) 21:47:00.05 ID:GmUX5JOa.net]
- >>788
矩形から矩形ならそれで出来ますが、矩形から傾きのある矩形を求める方法が知りたいです
- 800 名前:デフォルトの名無しさん [2015/10/03(土) 21:48:38.22 ID:DW8kiwr4.net]
- ちょっと図で書いてみて
- 801 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 21:53:58.07 ID:wd3SBpbJ.net]
- 傾きありだと飼いは無数にあるから条件が必要
- 802 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 21:58:00.99 ID:8iRLWTDj.net]
- >>789
これでどう? 動画も有るよ sssiii.seesaa.net/article/194921654.html
- 803 名前:デフォルトの名無しさん [2015/10/03(土) 22:07:52.43 ID:GmUX5JOa.net]
- シューティングゲームのすり抜け防止に使いたい
1F前の矩形+現在の矩形で矩形を求めて判定した後高速判定)、当たっていれば傾きありの矩形で判定したい(厳密判定)
- 804 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:18:40.75 ID:eQmk9cX0.net]
- 頂点8つだし、厳密なものでなくていいなら、最も遠い頂点間を長径とする長方形でいいんじゃないの?
- 805 名前:デフォルトの名無しさん [2015/10/03(土) 22:30:23.52 ID:GmUX5JOa.net]
- 線分でしてみます。
- 806 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:31:15.33 ID:RI5yhOba.net]
- 指定した点Pが凸多角形Xの内側か外側かはベクトルの内積で判定できるので、
凸多角形Yが凸多角形Xと重なりを持つかどうかなら、Yの辺を構成する全部の画素について上と同じことをやれば良い、 もし、YとXが非接触の状態から、Yの内側にXがいきなり飛び込むケースが在る場合は、 念のためXとYを入れ替えた判定もやる 単純にビットマップのANDでも取る方が幸せ鴨、 本当かどうかは知らん
- 807 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:34:55.68 ID:RI5yhOba.net]
- 訂正
誤:単純にビットマップのANDでも取る方が幸せ鴨、 正:が、小さい判定領域であればそこまでやるより単純にビットマップのANDでも取る方が幸せ鴨、
- 808 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 01:30:06.66 ID:RUTa+wSI.net]
- >>793
簡単 頂点を引き伸ばせばよい uploda.cc/img/img56100238268d5.png ↑適当な図
- 809 名前:デフォルトの名無しさん [2015/10/04(日) 03:21:04.05 ID:ZIaV4muE.net]
- >>798
そういう図は何で描いてるの?
- 810 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 04:42:29.50 ID:r2m0aNE2.net]
- C++スレなんだからC++じゃないの
ちな、このレスもC++で書いてる
- 811 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 10:03:01.78 ID:J4whK/1Y.net]
- JavaScriptの、isPointInPath のように、
その点が、図形のパス内にあるかどうか、判別できないの? それか、RGBAのアルファ値の、250〜255を、 アルファ値として使わず、 物体の判定用フラグとして使うとか
- 812 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 10:06:56.41 ID:yZJnSbHB.net]
- >250〜255を、アルファ値として使わず
30年前のC++使いが考えそうなクソ設計だな
- 813 名前:デフォルトの名無しさん [2015/10/04(日) 10:40:50.29 ID:+wQ6czRK.net]
- 内積で判定するのってどうやるの?
- 814 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 11:26:51.95 ID:r2m0aNE2.net]
- >>803
言いたかったのは ttp://www.nttpc.co.jp/technology/measurement.html の「線分と点の位置関係の判定」の部分 (最後の方の簡単な式。前半の大量の式は内外判定ではなくて距離の算出方式の解説に費やされている。 だが、上の記事の第2回目にさらにいろいろ書いてあったわ; ttp://www.nttpc.co.jp/technology/number_algorithm.html 世間は広大だわ、
- 815 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 19:47:31.94 ID:T8eNBhl9.net]
- boost::geometry に何かないの?
- 816 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:18:19.75 ID:VFapxPBu.net]
- VC++2015にて
std::map<std::wstring, std::wstring> testmap; testmap[L"Hello"] = L"World"; const std::map<std::wstring, std::wstring>& testmap2 = testmap; std::wstring val = testmap2[L"Hello"]; この4行目でC2678 二項演算子 '[': 型 'const std::map<std::wstring,std::wstring,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' の 左オペランドを扱う演算子が見つかりません (または変換できません) が発生するんだけど、要は「鍵と要素がwstring」で「constな」mapを上記のようにリテラル文字列で[]参照する書き方ってできる・・・? const std::wstring ws = L"Hello"; std::wstring val = testmap2[ws]; とかやってもだめだった エラーの詳細としては、mapのoperator[]に「wstring&」と「wstring&&」の両方があって曖昧だからNGらしい そもそもconstなmapなのに要素変更にも使える[]を呼んでいるのがダメってことかいね?const外せば動くし
- 817 名前:デフォルトの名無しさん [2015/10/05(月) 14:26:27.32 ID:9/62paZL.net]
- 同じ質問が最近にもあったような
- 818 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:37:36.36 ID:VFapxPBu.net]
- 本スレの過去をmapで検索してもそれらしき件は見あたらず・・・(過去ログは読めない)
- 819 名前:デフォルトの名無しさん [2015/10/05(月) 14:41:46.58 ID:HSAikNuy.net]
- >>806
testmap[L"jerk"]; これだけで副作用が生じるわけで諦めるしかあんめー std::wstring val = testmap2.find(ws)->second; あえてendが返ったか見てないけど、 それはoperator[]と同質の問題ってことで
- 820 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:43:47.49 ID:zntwOtDH.net]
- std::mapはconst版( operator[](const Key&) const )は無いよ−。
キーがなかったら新しい値を挿入するという動作だから。 ja.cppreference.com/w/cpp/container/map/operator_at findしましょ。
- 821 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:48:47.23 ID:VFapxPBu.net]
- そうか、[]の時点で要素増えるからダメか
- 822 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 23:43:18.77 ID:EGogu2NJ.net]
- C++の文法はクソだからな
コンパイラーが手を抜いてプログラマーが不利益を被る良い例だ
- 823 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 00:10:39.56 ID:1Ze1Ogug.net]
- >>806 https://www.google.co.jp/search?q=std+map+at
- 824 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:05:09.41 ID:CpsQkQ9O.net]
- C++の仕様がいい加減だからなのか、
regexのマルチライン対応なんかは、VCは対応でGCCは非対応だからな 行頭の^が文字列の頭になると行頭じゃえらい違いだよな
- 825 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:23:22.63 ID:EO5+cWSu.net]
- STLに問題があるようだな
- 826 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:25:23.49 ID:eWd5i2Y2.net]
- >>812
文法はあまり関係ないけど? 低脳が口挟んでも
- 827 名前:pかくだけだぞ []
- [ここ壊れてます]
- 828 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 11:20:11.67 ID:k9h8FU3j.net]
- むしろ文法があんなだから
コンパイラは手を抜けないとも
- 829 名前:デフォルトの名無しさん [2015/10/06(火) 11:54:27.84 ID:+syJpT4+.net]
- 文法じゃなくて意味が糞なんだよな
- 830 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 12:27:05.15 ID:Zn1/MkM8.net]
- そうそう、mapで思い出したけど
テーブルって実行時に初期化したくないやん ある程度の大きさのmapの初期化を出来るだけ実行時の生成コストを少なくするように記述するにはどうしたらいいのかな? 環境によって違うけど 構造体の配列とかだと、初期化子リスト付けとくと、.dataセクションに即値が書かれてて 初期化時にはそれをコピーしてポインタをセットして準備完了 それと同じようなことをmapでやって見たい c++11だとmapでも初期化子リスト使えるからそれでいけるのかな? 何年か前にg++でコンパイルして.dataセクション見てみたけど当時はmapの即値になってるように見えなかった c++03とかだとどんな手があるんだろう??
- 831 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 12:35:26.69 ID:k9h8FU3j.net]
- そうそう、mapで思い出したけど
テーブルって実行時にメモリ使いたくないやん ある程度の大きさのmapは実行時にメモリのコストが大きいけどどうしたらいいのかな? https://research.preferred.jp/2011/07/stllike-containers/
- 832 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 16:00:02.92 ID:wWQ1shVW.net]
- 初期化はだって実行時じゃないか?
- 833 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 20:34:00.60 ID:hYLbQ3+q.net]
- どうしてもdataセクションにそのままアクセスしたいのであればキーと要素を持つクラスをキーでソート済みの配列で書いてstd::mapのconstメンバ関数と同じものを持つラッパークラス書くとかかな
- 834 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:14:23.94 ID:mXRqVUnf.net]
- >>821
要するに map を実行時に構築するんじゃなくてコンパイル時に構築しといて実行時はメモリーコピーだけにならんもんか? っつーことでしょ たまに俺もそう思うことがある
- 835 名前:デフォルトの名無しさん [2015/10/06(火) 21:27:26.34 ID:jUDOLtzl.net]
- 確かにねー
そんな気することよくあるよな constexprなコンストラクタでどこまでできるのかと
- 836 名前:デフォルトの名無しさん [2015/10/06(火) 21:34:08.29 ID:MCB0h3nq.net]
- シリアライズかデータベースつかえ
- 837 名前:デフォルトの名無しさん [2015/10/06(火) 21:37:47.97 ID:MCB0h3nq.net]
- >>820の意図するところと、>>823は別で>>820は省メモリにしたいって話だろ。
- 838 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:54:53.32 ID:2Pt1OMoQ.net]
- 配列に入れて線形探索
要素数が小さいうちは線形探索はもともと他より致命的に悪いわけではないし 今日日のCPUならキャッシュと分岐予測とOOOの華麗な連携プレーを目の当たりにできる
- 839 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 22:43:09.92 ID:8+tr+OYB.net]
- これは遅くなりそうだからってがんばってマップ作ったら
線形探索ゴリ押しの方が速かったことならある
- 840 名前:デフォルトの名無しさん [2015/10/06(火) 22:47:58.27 ID:Cu8Zkmdv.net]
- 二分検索じゃだめなの
- 841 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 23:07:19.25 ID:hYLbQ3+q.net]
- std::sortもstd::lower_bound もあるんだからバイナリサーチぐらいしようぜと
- 842 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 05:07:06.28 ID:vlTfjNXN.net]
- >>826
>>823 は >>819 の > ある程度の大きさのmapの初期化を出来るだけ実行時の生成コストを少なくするように記述するにはどうしたらいいのかな? の話だよ データベースとか頓珍漢過ぎ
- 843 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 07:13:23.42 ID:JsRvQDZJ.net]
- コードの工夫で初期化コストを改善するのではなく
データベースでの永続保存という別手法での改善方法もあり得ることを示すことが それほどトンチンカンとも思えないが
- 844 名前:デフォルトの名無しさん [2015/10/07(水) 08:23:24.99 ID:PbTUGDDG.net]
- mapはエントリーを追加できるんだからドンダケ待ってもそうはならないと思。
- 845 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 08:34:53.72 ID:q7nyuwNL.net]
- >>832
なにを改善したいかも理解してないアホ w
- 846 名前:デフォルトの名無しさん [2015/10/07(水) 08:52:16.49 ID:d/PBWwg/.net]
- static_mapみたいな名前になるんだろか。
- 847 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 09:44:01.58 ID:0iwSPjqO.net]
- Rubyでは、Hashの要素数が増えていくと、再編成される
バケット数は、2の累乗付近の素数を使う。 つまり、倍々に増やしていく 8+3, 16+3, 32+5, 64+3, 128+3, 256+27, 512+9... 1つのバケットには、平均して5つの要素を入れる(衝突)。 11*5=55, 19*5=95, 37*5=185... つまり要素数が、56, 96, 186...個になると、 バケット数を増やして、再編成する 普段、1万個の要素を追加するのに、8msかかるが、 再編成するタイミングでは、20msかかる。 要素数が増えていけば、もっとかかるだろう
- 848 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 11:02:09.32 ID:8pl0pVx/.net]
- C++のスレでRubyとかアホなの?
環境も書かずに2msとかアホなの? C++なら1万個追加で1msだ
- 849 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 11:19:07.99 ID:vH7WjwMJ.net]
- 昔、某オンラインゲームの支援ツール作って、プロセスメモリ上にあるVC++2008実装のstd::mapの
テーブルを直接アクセスするコードを書いたのを思い出した
- 850 名前:デフォルトの名無しさん [2015/10/07(水) 11:20:45.74 ID:Qd1lXfpw.net]
- そういった成功体験は捨てたほうがいい
- 851 名前:836 mailto:sage [2015/10/07(水) 11:50:30.95 ID:0iwSPjqO.net]
- 「Rubyのしくみ」という本に書いてあるのだが、
RubyのHashは、Peter Moore が考案したもの。 C++でも、彼のロジックを使っているのなら、同じかなと思って mapの要素数が増えていくと、 バケット数を増やして、再編成されるので、 その際、全要素が移動するから、どうしても遅くなる だから、メモリ的には損だが、 最初から大きめのバケット数を確保しておけばよい
- 852 名前:デフォルトの名無しさん [2015/10/07(水) 13:03:07.75 ID:gQOBln3k.net]
- ん、std::hashって算法まで規定されてたっけ?
17.6.3.4を見る限りそうではなさそうだが
- 853 名前:デフォルトの名無しさん [2015/10/07(水) 14:19:20.92 ID:4iZc7XH3.net]
- struct hoge{};
const hoge h; をコンパイルすると error: uninitialized const 'h' と出ます。何故ですか constを外すとコンパイルできます。GCC4.4です。
- 854 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 15:58:16.91 ID:2UUkd3/F.net]
- 定数は値が書き換えられないわけで
最初の時点で値を代入しなかった場合、「お前なんのために定数宣言したの?」って突っ込まれてる
- 855 名前:デフォルトの名無しさん [2015/10/07(水) 16:15:42.33 ID:4iZc7XH3.net]
- vcではエラーにならないのは何故ですか
どっちが正しいですか
- 856 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 16:35:55.12 ID:vH7WjwMJ.net]
- どっちかというとGCCのほうが余計なお節介?
- 857 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 16:40:45.70 ID:jyxNZJK8.net]
- そうそう、馬鹿が作ったプログラムがちゃんと動かなくてもコンパイラの責任じゃないしね…
- 858 名前:デフォルトの名無しさん [2015/10/07(水) 16:42:23.02 ID:Qd1lXfpw.net]
- ideone.com/Sr2PO1
エラーにならないけれど
- 859 名前:デフォルトの名無しさん [2015/10/07(水) 17:24:17.24 ID:gQOBln3k.net]
- 842は警告ではなくエラーなのはなぜかと聞きたいんだろ
- 860 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 17:42:19.19 ID:tt9P1ak1.net]
- どっちが正しいも糞もないのでは
- 861 名前:デフォルトの名無しさん [2015/10/07(水) 19:09:00.13 ID:qAlHmwsj.net]
- gccはいつも糞だから、これもgccが悪いんじゃねーの。
- 862 名前:デフォルトの名無しさん [2015/10/07(水) 19:11:12.75 ID:Qd1lXfpw.net]
- gccではエラーにならないと言っているだろ
- 863 名前:デフォルトの名無しさん [2015/10/07(水) 20:31:15.75 ID:lwnukUe8.net]
- なるから言ってるんですアホなんですか
- 864 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 21:27:09.31 ID:BAz1ThzD.net]
- >>849
少なくともお前が糞なことは確か
- 865 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 21:40:43.83 ID:3DMfLJBU.net]
- 標準C++ではエラーになるのが正しい
VC++でエラーにならないなら標準非準拠か独自拡張 クラス型のconstオブジェクトをデフォルト初期化(で定義)するときは そのクラスにはユーザ定義のデフォルトコンストラクタがなければならない >>847がエラーにならないのは静的記憶期間のためゼロ初期化されて上記には該当しないから
- 866 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:01:49.00 ID:JsRvQDZJ.net]
- >>854
>ゼロ初期化されて上記には該当しないから フーン、それはISO/IEC 14882:2014のどこに書いてあるのですか?
- 867 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:06:57.63 ID:pNycS8F+.net]
- パーサー書いたことある人いますか
一応作ったけどすごい難しいというか面倒というか どういったアルゴリズムがいいのか馬鹿だからわからん
- 868 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:22:04.98 ID:ftNCaisU.net]
- BoostにC++パーサーがあったような
- 869 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:23:53.25 ID:Kru1mWVv.net]
- boost::spiritでおk
- 870 名前:デフォルトの名無しさん [2015/10/07(水) 23:24:01.37 ID:gQOBln3k.net]
- (1)文字単位の検査 →エラー文字を弾く
(2)文字を結合してトークンを作る →エラートークンを弾く、コメントなど延期トークンをまとめる (3)トークンを結合して再帰的ツリーを作る →構造の欠損を弾く (0)メタな表記がある場合、そのメタ表記についてまた(1)から逆再帰的に繰り返す できたツリーを意味解析に渡す
- 871 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:25:58.96 ID:0v/h/3vS.net]
- >>856
オープンソースのパーサー腐るほどあるだろそれいっぱい読め
- 872 名前:デフォルトの名無しさん [2015/10/08(木) 00:13:00.11 ID:p7bZHcv9.net]
- >>856
あります。 ・(E)BNF ・HTTP ・Sentence segmentation 等書きました。
- 873 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 04:32:10.77 ID:FlZYA0H2.net]
- >>856
LL(5)位がおすすめ
- 874 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 06:37:28.57 ID:ETVAEvki.net]
- >>862
なんでLL(5)んああんだよ? 5記号先読みするパーサなんて一般的じゃないだろJK、 ていうかLL(1)(再帰下降構文解析の一番簡単なやつ)とかは 素人でも勝手に再発見するがそこで理解が止まってしまうと 数式のパーサで死ぬので(そのまま作ると2項演算子が全部右結合になってしまう 、やpっぱまずわ正規言語のパーサあたりからから作ってみて感触をつかんだるのちに ボトムアップパーサの理解に進むべし、
- 875 名前:デフォルトの名無しさん [2015/10/08(木) 11:19:30.61 ID:GTAWjzct.net]
- LL(1)はLL(1)文法になるように人工的に作り出した言語にしかほとんどつかえないからな
LL(5)位なら適当にある言語ならほとんど解析できるだろ
- 876 名前:デフォルトの名無しさん [2015/10/08(木) 12:23:57.11 ID:GTAWjzct.net]
- 左結合にしたければカッコつければいいだけだし
右結合する演算子なんて普通無いしな
- 877 名前:デフォルトの名無しさん [2015/10/08(木) 12:25:42.38 ID:PEkcocuS.net]
- バックトラックはセキュリティの問題をはらみやすいので避けたほうが良い。
- 878 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 12:28:11.85 ID:GTAWjzct.net]
- また例の再帰関数大嫌い君か
- 879 名前:デフォルトの名無しさん [2015/10/08(木) 12:33:40.58 ID:PEkcocuS.net]
- 好き嫌いの問題ではないはず。
安全か安全でないか。
- 880 名前:デフォルトの名無しさん [2015/10/08(木) 12:39:28.24 ID:GTAWjzct.net]
- 妊娠と同じですとでも言いたいのか?
- 881 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 13:46:07.06 ID:XT2XQMd7.net]
- template関数をvirtualにはできない制限って今後のC++でも続くんでしょうか?
そもそもこの制限の理由は仮想関数テーブルを作るコストが大変だから、ってやつですよね? コンパイル時間かかってもいいからやってくれ、ってニーズはないんでしょうか?
- 882 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:03:10.79 ID:jZEKLa+0.net]
- 具体的にどういう風に仮想関数テーブルを構築したら
template関数のvirtual化が可能なんですか? 分割コンパイルは可能なのですか? コンパイル単位を守れるのですか?
- 883 名前:デフォルトの名無しさん [2015/10/08(木) 14:29:05.60 ID:1TGlpU6G.net]
- >>871
やってみろよ、まず struct A { template <typename T> virtual void func(T) { } };
- 884 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:40:04.09 ID:jZEKLa+0.net]
- そんなこと出来っこないだろう、という返しだったのですが・・・
- 885 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:48:15.03 ID:jZEKLa+0.net]
- プログラムに必要なソースコードをグローバルな視点ですべて解析してから
コード生成を開始するならテンプレートな仮想関数どころか もっととんでもない事が可能かも知れんが C++はcpp単位で分割コンパイルするのがルールだから無理っていう baseクラスをコンパイルしてvtable作る時には それにどんな派生クラスがあるか分らないし、分らなくてもコンパイルできるように なってるのがC++のルールだからね
- 886 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 15:32:00.85 ID:YWpiDxnr.net]
- テンプレートのインスタンスの概念すら知らないってことでしょ?
こんなの初心者レベルの内容じゃん やってみろよじゃねーよ
- 887 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 17:33:27.84 ID:G0kXf/E8.net]
- むしろ出来ないと主張する根拠を聞きたいものだ
- 888 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:00:23.72 ID:TDkjtQvD.net]
- 今の仕組みじゃ出来ないだろ。
普通のvtableより更にものすごく遅い 仕組みでやるなら出来ないことはないだろうが。
- 889 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:07:23.28 ID:G0kXf/E8.net]
- ISO/IEC 14882:2014は別にvtableの実装を要求してないのだが
「今の仕組み」が普遍的なものであるかのように語られても
- 890 名前:デフォルトの名無しさん [2015/10/08(木) 18:11:00.56 ID:1TGlpU6G.net]
- vtable以外の実装の具体例もしくは具体案なしに空想論を語られてもねえ
今んとこ「できるわけない」という立場を取っているが 説得力のある反論〜反証は金払ってでも拝聴したい
- 891 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:12:29.15 ID:jZEKLa+0.net]
- 普通に考えて無理だろう
実行時に動的にロードする事も有るし うまくいくとは思えないね
- 892 名前:デフォルトの名無しさん [2015/10/08(木) 18:12:44.05 ID:GTAWjzct.net]
- 出来るからやるんじゃない
出来ないからやるんだよ
- 893 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:13:11.65 ID:TDkjtQvD.net]
- vtableより早い仕組みがあれば
vtableに置き換わるだろうが vtableでできないなら何らかの 遅い仕組みで実装しなきゃいけない。 その機能を使わない場合に遅くならないようにするためおそらくはvtableとのハイブリッドになる。 少なくとも現状の仕様でできないのだから、できるというならリーズナブルな実装の一つでも提案しろと。
- 894 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:20:47.25 ID:G0kXf/E8.net]
- なんだ
「俺の使ってる糞コンパイラーではできない」 ってとか。そりゃしょーがない
|

|