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


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

【C++】template 統合スレ -- Part6



1 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:11:32]
C++ のジェネリックプログラミングの話をしましょう。
以下のスレッドを統合するスレです。
STLスレッド
Part1 pc.2ch.net/tech/kako/1004/10042/1004287394.html
Part2 pc3.2ch.net/tech/kako/1026/10267/1026793823.html

【C++】Boost使い集まれ!
pc3.2ch.net/test/read.cgi/tech/1033830935/ (html化待ち?)

Generic Programming with C++ Template
pc.2ch.net/tech/kako/1008/10085/1008593126.html
【C++】template 統合スレ -- STL/Boost/Loki, etc.
pc2.2ch.net/tech/kako/1037/10377/1037795348.html
【C++】template 統合スレ -- Part2
pc2.2ch.net/test/read.cgi/tech/1047978546/ (html化待ち)
【C++】template 統合スレ -- Part3
pc5.2ch.net/test/read.cgi/tech/1066493064/ (html化待ち)
【C++】template 統合スレ -- Part4
pc5.2ch.net/test/read.cgi/tech/1083550483/ (html化待ち)
【C++】template 統合スレ -- Part5
pc5.2ch.net/test/read.cgi/tech/1091522597/
関連スレ、その他リンクは >>2-5 あたりに。


822 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:32:15 ]
816が煽りには見えないけどなあ。
普通にズレてるだけで。

823 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:32:55 ]
>>815
あっと,「もしSFINAEがなければこういうことが問題だよね」というのは書いてますけれど.

824 名前:デフォルトの名無しさん [2005/08/07(日) 23:35:03 ]
>>822
分かったからもう出てくんな

825 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:40:11 ]
本日の推奨NG
「。」「顕示」「煽り」「キレ」
すっきりして(・∀・)イイ!!

826 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 02:07:36 ]
expressional template
VC.net2003だと、ちょっと複雑な式を書いただけで
コンパイル通らない。
そういうものなの?
gccなら通るのかな

827 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 02:12:44 ]
>>826 その「ちょっと複雑な式」とやらを晒すとレスが付くかもしれない。

828 名前:デフォルトの名無しさん [2005/08/08(月) 03:35:21 ]
>>826
現存する如何なるコンパイラでも通らない程複雑(広義の)なコードに問題ありに100円。


829 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 04:40:19 ]
ネストが17超えるとか?


830 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 15:16:31 ]
いろんな要素が混じってるので必ずしもexpressional templateが
原因でないのかもしれないけど

boost::numeric::ublas::matrix & A(){return A_ }
boost::numeric::ublas::matrix & B(){return B_ }

B() = prod( A(), A())*3 + B() + ....

こんな感じかな.全部はさらせないのですまそ



831 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 01:41:27 ]
>>830
エラー貼ったがいいよ
もし膨大なら
再現するコンパイル可能な最小のコードを貼って


832 名前:831 mailto:sage [2005/08/09(火) 01:45:25 ]
>コンパイル可能な
おっとコンパイルは通らないのか

>あなたがコンパイル通らないことを理不尽に思う
に訂正

ようするにテストする側の身になってコードを
貼ってください


833 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 11:45:51 ]
>>830
>こんな感じかな.全部はさらせないのですまそ

じゃあ、他の人にエラーの原因を調べてもらうのも諦める事ですな。
証拠不十分なまま、証言台に立つような物ですぞ。

834 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 08:39:28 ]
だれもいない

835 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 20:28:20 ]
ホントにだれもいないのかよ

836 名前:デフォルトの名無しさん [2005/08/20(土) 20:39:26 ]
いねーよ

837 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 20:40:28 ]
質問やら話題があれば人は自然と集まってくる。

838 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 20:52:57 ]
おまえら
”てんぷれーと”にだまされてないか?
”しーぷらぷらのてんぷれーと”って結局あれだよ。
中途半端。
そう中途半端。
LISPに比べたら。
全然読み易くならない。
いろんな括弧であふれてLISPの方がまだサルのように読みやすい。
まあここにタムロしてるおまえらの言い分は判ってるよ
こうだろ、静的カタカタ型が重要なんです!
LISPじゃすぴーどでないよプププ
とかな。
ばーか。
カタなんかより柔軟性なんだよこのご時世はよ
カタカタうるせーのなんのって、笑うわ。
C++考えた奴みたいにハゲろ
全員

839 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 20:59:39 ]
確かに、「ネイティブコード吐く言語じゃないと速度が」
とか必死に言ってる奴に優秀なプログラマはいないな。


840 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 21:10:42 ]
しーぷらぷらの処理系。
てんぷれーとバグだらけ。
笑うわ。
いったい何年てんぷれーとやってんだよ
おまえらがべんだーの修正待つあいだに
おれLISPで新しいマクロどっさり作る
生産性バカたけぇーわLISPはよ
LISPはカタないからすぴーどでないよプププて、
そりゃ頭がかてえ証拠だな。
そんな奴は引退したほーがいいんじゃねーかなあ
LISPにカタないなら組み込めよ、ハゲども
ぶーとすとらっぷとか考えろよ
わかるか?ぶーとすとらっぷって。
しーぷらぷらにはそんながいねんはないかもなあ。
最適化なんかやりやすいなーすいすいいけるぜ
こんすの海の中にいると不満なんてすぐ解消する
それがLISP。
まあ頭のかたいカタカタ野郎は
やっぱりC++考えた奴みたいにハゲろ
全員



841 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 21:16:51 ]
>>839よりは優秀だけどね。

842 名前:マイク ◆yrBrqfF1Ew mailto:sage [2005/08/20(土) 21:31:32 ]
C++をしーぷらぷらなんて言うのは無能。

843 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 21:59:52 ]
C++でLisp系の俺言語&処理系作るのが最近の俺の趣味なんだが、
なんかこいつの仲間と思われたくないな、恥ずかしくて。

844 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 22:59:08 ]
>>842
シープラスプラス?
それともシーたすたす?


845 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 23:33:28 ]
しーいんくりめんと

846 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 23:43:58 ]
C++
後置ということは、まだ本当のC++にはであてないわけだ

847 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 23:45:24 ]
C++には出会えている
++Cに出会えてないだけ

848 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 00:37:45 ]
838は、C++のテンプレートが読みにくく、
コンパイラのバグのことも分かっていて、
C++作った人物についても詳しいようだな

849 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 00:48:03 ]
Schemeの純粋指向にはあこがれるけど、Lispはどうでもいいや。
継続は面白いな。

>LISPはカタないからすぴーどでないよプププて、
型が無いと遅くなるつうのは初耳ですが、どこの情報?

850 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 01:06:13 ]
>>849
VBのバリアント型みたくデータ側に型情報があるから
オブジェクトを参照するたびに動的な判定が毎回必要ってことだよ。
型判定に値の取り出しとか最低でもCの3倍以上のコストが掛かる。
Rubyが遅いのもこれがかなり影響してる。



851 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 01:09:17 ]
でも日本語は不自由なようだ。

852 名前:851 mailto:sage [2005/08/21(日) 01:09:45 ]
>>838

853 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 01:25:23 ]
> オブジェクトを参照するたびに動的な判定が毎回必要ってことだよ。
随分ダサい実装ですね。

854 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 01:41:07 ]
そのダサイ実装を越えたところに桃源郷が

855 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 01:41:43 ]
ももげんごう?

856 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 12:12:15 ]
ももげんごう(←なか変換できない)

857 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 14:42:55 ]
桃源郷=Xanadu キサナドゥ

858 名前:デフォルトの名無しさん mailto:sage [2005/08/22(月) 00:38:44 ]
>>850
正直、有名なコンパイラならそんなださい実装は少ないよ。
Common Lispには型指定の構文があるくらいだし。

859 名前:デフォルトの名無しさん mailto:sage [2005/08/23(火) 09:18:30 ]
数値計算したい人は
速度気にしないならlistでなくてMatlab使う

860 名前:デフォルトの名無しさん mailto:sage [2005/08/23(火) 15:06:35 ]
>>858
CLOS基地外氏ね
スレ違いだし



861 名前:デフォルトの名無しさん mailto:sage [2005/08/23(火) 15:34:43 ]
だれもいないからとか言うから

862 名前:デフォルトの名無しさん mailto:sage [2005/08/23(火) 16:29:46 ]
人稲杉なので、チラシの裏

boost::bind は、bind( f, _1, _2, a, b, _1 ) を行うことで、
func::return_type ( A1 & a1, A2 & a2 ) というファンクタを返すけど、
この _1 や _2 を、_decimal や、_text、_float のような書式指定プレイスホルダに
置き換えて、以下のようにすれば、タイプセーフな printf が出来るなと
考えたことがあった。

function< void( int ) > f = format( cout, "a = ", _hex, endl );
// ↑ cout << "a=" << %x << endl; と同じ事を行うファンクタを返す。
f( 10 ); // cout << "a=" << hex << 10 << endl;
f("aaa"); // コンパイルエラー

上の形とは違うけどその思想に基づいて実際に作ってみたことがある。
でも結局実用では (w)sprintf しか使わなかった。勉強にはなったけどね。
template プログラミングは楽しいけど、冷静なるとしなくていいことまで
テンプレート化してたりしていることがあるので気をつけないと。

863 名前:デフォルトの名無しさん mailto:sage [2005/08/23(火) 17:12:40 ]
>>862
> 冷静なるとしなくていいことまでテンプレート化してたりしていることがある
昨夜、そんな関数テンプレートを必死で非テンプレート関数に直してた・・・。
数日前に必死で関数テンプレートにした箇所だったのだけど・・・。

864 名前:デフォルトの名無しさん mailto:sage [2005/08/24(水) 12:24:27 ]
template<typename X_TYPE>
void xxx(X_TYPE x)
{}
として型の自動認識の手間減らしは多用するな

865 名前:デフォルトの名無しさん mailto:sage [2005/08/24(水) 13:32:40 ]
そうね。時々やる。いっそのこと型を書くのはオプションにして
MLみたいに型推論してくれればいいのにと思う。


866 名前:デフォルトの名無しさん mailto:sage [2005/08/24(水) 17:50:00 ]
C++ 0xだとそんな機能が追加されるとかされないとか。

867 名前:デフォルトの名無しさん [2005/08/28(日) 09:36:27 ]

テンプレートがちんぷんかんぷんでまったく理解できない私に
理解できるようになる方法を教えてください。まじで。


868 名前:デフォルトの名無しさん mailto:sage [2005/08/28(日) 11:02:49 ]
引数の型を使うときに決められるんだよ。

869 名前:デフォルトの名無しさん mailto:sage [2005/08/28(日) 11:35:27 ]
>>867
騙されたと思ってstd::min()でも使って味噌。

870 名前:デフォルトの名無しさん mailto:sage [2005/08/28(日) 13:22:51 ]
せめてstd::vector くらい使わないとありがたみ沸かないだろう。



871 名前:デフォルトの名無しさん mailto:sage [2005/08/28(日) 18:04:02 ]
>>867
つ[C++ Templates(英文)]

872 名前:デフォルトの名無しさん mailto:sage [2005/08/29(月) 06:58:30 ]
STL バンザイ

873 名前:デフォルトの名無しさん mailto:sage [2005/08/29(月) 21:56:02 ]
STLとboostが無かったら俺C++使いつづけて無かったよ。

874 名前:デフォルトの名無しさん mailto:sage [2005/08/29(月) 22:30:29 ]
俺もそうだ。

875 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 00:21:09 ]
会社でtemplate使うなって言われたんだけど…
何故?

876 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 00:24:13 ]
会社で使いこなせるヤシがいないからと邪推

877 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 00:31:06 ]
代わりにLISP使え

もっと困るかもな
へへ

878 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 03:19:35 ]
>>875
それは、あなたが馬鹿だからです。

879 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 03:26:37 ]
お前だけは使うなって言われたなら
そうかもしれないけどさ

880 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 09:13:41 ]
>>875
まともな会社にうつるべし



881 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 09:55:32 ]
>>875
会社に聞け。
ここで聞くようなやつは>>878に決定。

882 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 10:02:04 ]
>>881
なんでそんな必死にこの話題にフタしたがるの?
コンプレックスでも刺激された?w

883 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 11:09:31 ]
>>882
頭、大丈夫か?

884 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 14:45:37 ]
VC6のプログラム保守してるとかじゃないのか>875


885 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 22:33:39 ]
>>883
大丈夫だよ。
質問に答えられない誰かさんの頭は大丈夫じゃないみたいだけど。

886 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 03:17:12 ]
・移植性重視
・扱える開発者が少ない or メンテする人が固定とは限らない

のどっちかだろうねえ
後者の事情のほうが多いと思うけども

887 名前:デフォルトの名無しさん mailto:sage [2005/09/09(金) 02:16:23 ]
管理職の団塊世代が、ピュアなC以外理解できないとか


888 名前:デフォルトの名無しさん mailto:sage [2005/09/09(金) 22:28:28 ]
名前空間→記述が冗長すぎる
テンプレート→制限が多すぎる
クラス→継承が可読性を悪化させる
その他→コンパイル時間が長すぎる

889 名前:デフォルトの名無しさん mailto:sage [2005/09/09(金) 23:39:18 ]
C++→俺が解からない

890 名前:デフォルトの名無しさん mailto:sage [2005/09/09(金) 23:45:15 ]
俺が解からない→みんなも解からない



891 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 02:04:02 ]
>>886
>移植性重視

templateって移植性下がるの?

892 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 02:33:11 ]
例えばGCCと心中するつもりならGCCで動けばOKって人もいるでしょ

893 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 02:46:27 ]
>>891
ある程度ISO C++に準拠したコンパイラがない環境には移植できなったりだとか。

894 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 03:16:30 ]
少なくとも、vc7.1とgccの両方で動くテンプレートくらい書けないと
話にならないと思うけど。


895 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 12:53:08 ]
VC7.1とgcc3.3以降で動くテンプレート書くのは簡単だろ、どっちもほぼ100%標準準拠なんだから。
むしろVC6とかgcc3.2とかで動くか動かないか判断する方が難しいと思われ。

896 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 13:14:28 ]
>>895
VC6とgcc3.2以前はもうあきらめた。
というかエラーメッセージすらとんちんかんな時があるのが頭痛い。

昔の仕事のプロジェクトコードのメンテでちょっとしたテンプレート書いてとかで
引っかかると泣きたくなる。


897 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 13:25:22 ]
>>894-895
まるで、複数コンパイラで有効なテンプレートを書くのが上級者であるかのような言い方だな。
そういった汎用性のあるテンプレートは入門者レベルの機能しか使ってない。
君らは、入門者レベルのテンプレートしか書いたことないんだろ?

898 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 13:31:55 ]
スレの存在を否定するような行為が、目下のベストな対処法

「技巧に走らない」

899 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 14:04:38 ]
>>897
> であるかのような言い方だな。
印象だけでものを書く場合、その印象がトンチンカンだと
残りの文章がすべてトンチンカンになるから今後は気をつけな。

900 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 14:25:57 ]
シンプル伊豆ベスト



901 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 15:15:35 ]
>>897
「入門者レベル」とか「汎用性のある」とか、
自分が「上級者」じゃない事がバレバレなんですがw

まぁ、恥の上塗りだけはしないようになw


902 名前:名無しさん@そうだ選挙に行こう [2005/09/10(土) 18:43:40 ]
>>888
つまり、templateに限らずC++は糞だって事で包茎?

903 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/10(土) 19:37:56 ]
ていうかお前が包茎。

904 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/10(土) 19:45:33 ]
24時間テレビ C++ は地球を救う

905 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/10(土) 20:09:37 ]
>>902,904
んなこたーない。


906 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/10(土) 22:11:14 ]
>>894は馬鹿だな。

907 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 01:31:57 ]
894は、VC以外でも通るように、typenameちゃんと書けとか
その程度の意味じゃねえの?

908 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 05:40:17 ]
言語仕様が複雑すぎて処理系が追いつかないのは本末転倒

言語仕様満たしてから最適化とかやれよ馬鹿ベンダーはよ
現実逃避してんじゃねーよ

909 名前:名無しさん@そうだ選挙に行こう [2005/09/11(日) 07:05:25 ]
ヒント:需要と供給

910 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 09:16:30 ]
つまりDelphiが最強ということになるな。



911 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 09:37:08 ]
Delphi知らないんだけどtemplateみたいなのあるの?

912 名前:名無しさん@そうだ選挙に行こう mailto:sagen [2005/09/11(日) 09:44:31 ]
あるか!

913 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 09:52:58 ]
なぜ怒る・・・。
そこがDelphi信者のコンプレックスなのか?

914 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 09:57:55 ]
でもDelphiってすごいよね
一代でここまでメジャーになった言語パッケージってないでしょ
それともPascalの下積みがあったから?

915 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 10:18:13 ]
>>914
世間ではC#の方がメジャーだと思うがね。

916 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 10:20:04 ]
C#は単なるM$の宣伝力だと思うけど

917 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 11:13:26 ]
>>916
CとかC++から名前の連続性もあるしね。


918 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 12:07:50 ]
C#なんて使って製品開発とかしてる香具師っているの?

919 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 14:40:54 ]
天下のM$がVBで真似したぐらいだからな
当時はRADは斬新な開発環境だった

920 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 15:18:44 ]
Delphi使いこそプログラマの頂点ということか。



921 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 16:34:19 ]
Delphiが当初からMS謹製であったならば、VBだ、MFCだ、ATLだ、WTLだ、
STLだ、.Netだ、C#だ、C++/CLIだといったことで右往左往することもなく
10年間一貫とした言語体制、RAD環境、爆速コンパイル、コンポーネント化
による高い生産性等々を皆が維持・共有できたかと思うと残念でならないよ。

922 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 16:49:55 ]
C#って、Delphi作った香具師が理想の言語として設計したんだろ。

Delphi信者御苦労様w


923 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 18:34:04 ]
まだDel厨いたのか
そろそろ博物館に行けよ

924 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 20:14:45 ]
博物館の恐竜が一緒に浮かれて踊ったぜ

925 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 23:35:20 ]
>>921
STLだけその中で異質だな。

926 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 09:47:06 ]
予想通り嫌Del厨が暴れることになったか・・・

927 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 11:54:51 ]
つか、スレ違いうぜぇですよ?

928 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 11:58:56 ]
>>924
子門乙

929 名前:デフォルトの名無しさん [2005/09/14(水) 15:45:52 ]
template< typename char_type, tepename char_traits >
std::basic_ostream< char_type, char_traits >& operator<< ( std::basic_ostream< char_type, char_traits >& stream, const int& value )
{
stream << "value = " << value << endl;
return stream;
}

この関数内で文字列リテラル"value = "を
char_type がcharなら、"value = "
char_type がwcharなら、L"value = "
にしたいんですが、どうしたら良いでしょうか?

930 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 16:12:57 ]
>>929
テンプレートの特殊化か、オーバーライドで解決させる。

ex)
inline char const * choice( char const * s, wchar_t const *, char )
{
 return s;
}
inline wchar_t const * choice( char const *, wchar_t const * s, wchar_t )
{
 return s;
}

stream << choice("value=",L"value=",char_type()) << value << endl;



931 名前:929 mailto:sage [2005/09/14(水) 16:31:48 ]
>>930
#define literal_str( char_type, str ) choice( str, L##str, char_type##() )
付きで採用しますた。
ありがとうございました。

932 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 17:21:04 ]
>>931
二番目の##は余計。

933 名前:929 mailto:sage [2005/09/14(水) 21:31:05 ]
だからなんだよこのタコ助!

934 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 22:41:20 ]
確かに余計だな。

935 名前:929 mailto:sage [2005/09/15(木) 00:04:09 ]
>>933
>>929の著作権は私にあります。
なんなら出るとこ出ても・・
と思いましたがきっと>>933
私にインスパイヤされて誕生した新種なんでしょう。
今回はかんべんしてやります。

936 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 11:53:02 ]
template <class T>
void f1(T t)
{
 f2(t);
}

void f2(int) {}

int main()
{
 f1(1);
}

というコードは正しいのでしょうか?

VC7.1 ではコンパイル可能で comeau ではコンパイルできません。

937 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 12:50:56 ]
>>936
comeauだとなんてエラーが出るの?


938 名前:636 mailto:sage [2005/09/15(木) 13:09:16 ]
>>637
identifier "f2" is undefined
detected during instantiation of "void f1(T) [with T=int]"

というエラーです。strict mode のみのようです。

ちなみに、ユーザ定義型の場合は期待通りにコンパイルできました。

template <class T>
void f1(T t)
{
 f2(t);
}

struct a{};
void f2(a) {}

namespace adl
{
 struct a{};
 void f2(a) {}
}

int main()
{
 f1(a());
 f1(adl::a());
}

このコードはコンパイル成功。

939 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 14:23:18 ]
>>936
gcc3.4.4(MinGW) で、-Wallで通る。

940 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 14:26:00 ]
>>938
プロトタイプ宣言したら?



941 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 14:31:54 ]
>>938
f2()のプロトタイプ宣言が必要っぽい。

942 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 16:28:36 ]
Incompatibilities Between ISO C and ISO C++, David R. Tribble

david.tribble.com/text/cdiffs.htm#C90-impl-func
・ Implicit function declarations

> C++ does not allow implicit function declarations. It is invalid to call a function
> that does not have a previous declaration in scope.
>
> C99 no longer allows functions to be implicitly declared.
> The code above is invalid in both C99 and C++.


943 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 17:47:26 ]
>>936
標準の (14.6.4.2/1) をそのまま読む限りでは, unqualified name lookup として
解決される名前は point of definition の文脈のみが考慮されて,
associated namespaces を用いた名前解決(要するにADL)では,point of definitionと
point of instantiation の双方の文脈が考慮されるみたいですね.なので,

>>936 の f1(1) という呼び出しにおける f1 中の f2(t) に対する名前解決の場合,
unqualified name lookup では f2 の呼び出しを定義している場所(point of definition)
からは f2 という名前は解決されないので失敗し,さらに f2(t) は int を引数とした
呼び出しのために associated sets of namespaces and classes も空 (3.4.2/2) の
ため,ADL 経由でも f2 は見つからずに,結果 f2(t) という関数呼び出しに対応する
名前の解決が失敗する.

一方で,>>938 の f1(a()) 及び f1(adl::a()) という呼び出しにおける f1 中の f2(t)
に対する名前解決の場合,>>936 と同様 unqualified name lookup による名前解決は
失敗する.ところが,a 及び adl::a はユーザ定義型で,各々グローバルと adl が
associated namespace になる.この場合,f2(t) という呼び出しが定義されている
場所 (point of definition) と f1 がインスタンス化された場所
(point of instantiation) 双方の文脈が名前解決において考慮される.結果,
point of instantiation の文脈で void f2(a) と void adl::f2(adl::a) が
visible のため,これらの名前解決が成功する.

と,こういう感じだと思います.ちなみに VC++7.1 の挙動は,dependent name だろうが
non-dependent name だろうが,ADL 経由だろうがなかろうが,全て
point of instantiation の文脈も考慮するという実装になっているための結果で,
これは標準に準拠した挙動ではないです.

944 名前:943 mailto:sage [2005/09/15(木) 17:49:27 ]
あ,すいません.長々と書きましたけれど結論としては,
936のコードは(標準に準拠していないという意味で)正しくないと思います.

945 名前:936 mailto:sage [2005/09/15(木) 22:07:49 ]
>>943
なるほど。
実体化の時点で名前の解決を行っても、
実体化の時点の文脈が考慮されるとは限らないんですね。

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

946 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 22:41:25 ]
template<class T>
class Foo {
 public:
    ...;
 private:
    class Bar { 
    public:
        ...;
        bool operator()(const Bar& l, const Bar&r) const;
    private:
        T m_value; 
        int misc_info;
    };
    
    std::multiset<Bar, Bar::Comp> m_bars;
};

m_bars の先頭・末尾に番人(misc_value などは他のメ
ンバと同様にアクセス可能にしたもの)を導入したいの
ですが、どういうアプローチで作れば良いでしょうか?


947 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 01:33:46 ]
>>946 undeclared identifier `misc_value'

948 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 09:43:59 ]
>>946
テンプレート関係ないやん。

949 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 16:56:08 ]
STLportではコンパイルできるけれど、
g++のSTLではエラーが出てしまうようなコードってどんなものがあるでしょうか?
vectorやstringくらいしか使ってないんですが、コンパイルでエラーが出ます。。

950 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 17:25:59 ]
エラーメッセージ書かん奴には答えない



951 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 17:33:35 ]
>>949
氏ね!

952 名前:デフォルトの名無しさん mailto:age [2005/10/05(水) 16:55:29 ]
template<int num, int count> struct power{ enum { value = power<num, count-1>::value * num }; };
template<int num> struct power<num, 1>{ enum { value = num }; };
template<int num> struct power<num, 0>{ enum { value = 0 }; };
template<> struct power<0, 0>{ enum { value = 0 }; };
       ∋oノハヽo∈
         ( ´D`) <テンプレート ♪ で、計算♪計算♪  age♪ age♪
          (つ┳9
         (_)┃_)
          ━§━
            §
   ⌒ヽ〃⌒ヽ〃    
int main()
{ //2の8乗
cout << power<2, 8>::value << endl;
return 0;
}


953 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 18:45:40 ]
>template<int num> struct power<num, 0>{ enum { value = 0 }; };

それはどうかと思うぞ。

954 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 19:02:12 ]
template<int num> struct power<num, 0>{ enum { value = 1 };};

955 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 19:13:50 ]
<0,0>,<num,1>の特殊化は必要ないな

956 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 21:12:57 ]
むしろこうしてコンパイル時エラーにしろよ。
template<> struct power<0, 0>{};

957 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 21:24:22 ]
0^0って数学的にはどうなるの?

958 名前:ヽ(´ー`)ノ ◆.ogCuANUcE mailto:sage [2005/10/05(水) 22:22:38 ]
>>956
n^0 = 1


959 名前:ヽ(´ー`)ノ ◆.ogCuANUcE mailto:sage [2005/10/05(水) 22:23:20 ]
スマン。レス番間違えた orz

960 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 22:28:09 ]
>>957-958
一方で0 ^ n = 0となっているから問題になる。
ところで^と言えばXORの立場が。



961 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 12:22:20 ]
VC6のtemplate関数ってバグある気がするんだけど...
template<typename T> void test();
引数無し呼んだときに解決できてないみたい...
template<typename T> void test(const T&);
みたいにすればオーバーロードで解決できるのか、大丈夫みたいなんだが...


962 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 12:36:11 ]
いまどきそんな化石コンパイラに文句言われても…

963 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 13:39:14 ]
化石以前にtemplateに関しては欠陥コンパイラですから・・・

964 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 17:42:46 ]
そもそもC++コンパイラじゃないですから

965 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 22:25:31 ]
少なくともANSI/ISO C++準拠とは言えないな。

966 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 04:44:36 ]
じゃーVC7はどうですか?

967 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 05:23:27 ]
7.1はかなりまとも。

968 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 12:23:52 ]
7と7.1は全然違うぞ
7はかなり微妙

969 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 13:11:10 ]
7はCStringにバグがあったね。STL周りもちょっと不安定なところがあった気もする。

970 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 14:50:27 ]
7.1って具体的にclのどのバージョン?


Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
っての使ってるけど



971 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 15:06:35 ]
VS.net(VC.net)2003か、VCTK2003のやつが7.1
13.10.3077なら7.1だな。VS.net2003の方のやつだろ。

972 名前:デフォルトの名無しさん mailto:sage [2005/10/14(金) 17:36:27 ]
codeguruに記事の投稿してみたがレビュー通んないとだめなんだね


973 名前:デフォルトの名無しさん [2005/10/18(火) 15:57:25 ]
age

974 名前:デフォルトの名無しさん mailto:sage [2005/10/26(水) 22:29:10 ]
人稲杉なので、バカネタを投下。
www.hakusi.com/up/src/up5538.zip.html

Boost.Lambda みたいに Expression Template を使った、引数に対して安全なフォーマットライブラリ。
Boost.Function や、Boost.Bind と組み合わせることが可能。
以前作成したものと違い、オマケ機能だが入力も可能で、ワイド文字にも対応。

ただ、 _ と % だらけで見た目がキモイ上に、実用性がイマイチ謎。
Expression Template の資料として。

// 出力
 string strA, strB;
 sprint( strA, "1 " % !_x[6] % "/" % _s, 10, "aaaa" ); // sprintf( str, "%#6x/%s", 10, "aaaa" ); みたいな。
 sprint( strB, "2 " % (!_x[6]*='0') % "/" %_s, 10, "aaaa" ); // sprintf( str, "%#06x", 10, "aaaa" ); みたいな。
 cout << strA << endl; // 1 0xa/aaaa と出力
 cout << strB << endl; // 2 0x000a/aaaa と出力
// 入力
 int xA, xB;
 string yA, yB;
 sscan( strA, "1 " % _ws % _x % "/" % _s, xA, yA ); // 空白部分はスキップさせる
 sscan( strB, "2 " % _x % "/" % _s[3], xB, yB ); // 文字列部分は3文字のみ取得
 // 出力
 print( cout, "xA = " % _d % "\nyA = " % _s % _endl, xA, yA );
 print( cout, "xB = " % _d % "\nyB = " % _s % _endl, xB, yB );
 // xA = 10
 // yA = aaaa
 // xB = 10
 // yB = aaa と出力

975 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 00:15:14 ]
>>974
せっかくなので便乗しておきますね.将来の話なのでアレですけれど.

www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1603.pdf

976 名前:デフォルトの名無しさん mailto:sage [2005/10/29(土) 10:05:49 ]
難読コンテスト会場はここですか?

977 名前:デフォルトの名無しさん [2005/10/31(月) 13:08:43 ]
>>974
すげー--w
確かに scanf っぽいこと出来るし。

でも、Perl みたいで汚いな。使おうとは思わんけど。

978 名前:デフォルトの名無しさん mailto:sage [2005/10/31(月) 13:59:50 ]
>>974
マジキモス

979 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 14:02:41 ]
>>974
良くこんなん書く気になるなあ。

980 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 14:40:35 ]
>>975
boostな人達はあれば便利だけど、一般人的にはどうなのかなあ?



981 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 16:19:39 ]
>>980
どの辺が便利なのか理解に苦しむ。

982 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 13:49:05 ]
>>980
型安全な printf, scanf というのが一番インパクトが大きいと思います.
後,lambda のような(擬似的な)可変長テンプレート引数を使ったライブラリの
コンパイル時メッセージが見やすくなるというのもあるかと.

>>981
Boost な人にとっては,これまでプリプロセッサなどで力技で実装していた
Function, Tuple, MPL, Lambda など多くのライブラリの実装が
非常に楽に見通しよく実装できるようになり,便利になると思います.

983 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 15:15:01 ]
>>982
コンパイルエラーなどたいして問題じゃないけどね。
それよりもデバッグの方が大変。

984 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 15:19:33 ]
変な拡張するより単にプリプロセッサを名前空間対応にすればいいだけちがうの?


985 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 15:30:42 ]
>>984
それじゃプリプロセッサにならないでしょ。

986 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 17:19:51 ]
え、C/C++のプリプロセッサってトークン理解してるはずなんだけどなあ。
商用じゃプリプロセスと同時に解析するのが主流だし。
テンプレート引数程度の局所的変更じゃ根本的解決にならないでしょ。

987 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 17:26:54 ]
名前空間を通常のものとプリプロセッサで共有しようとすると
泥沼になる気がする。(例えば
# define STD_BEGIN namespace std{
とか)
pp専用の名前空間ならwaveが実験的に対応している。

988 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 22:37:23 ]
プリプロセッサと言えば、C++/CLIでとんちきな拡張してるよ。
スペース区切りキーワードってやつ。
www.microsoft.com/japan/msdn/vs05/visualc/TransGuide.asp

989 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 00:29:44 ]
プリプロセッサと本体の間のフォーマットってANSIか何かで標準規格ある?
#132 "hogehote.h"
たいていはこんなの出るんだよね?

990 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 01:08:57 ]
次スレ立てて良いですか?



991 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 01:21:16 ]
C++相談室で十分だと思うんだ。

992 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 01:32:58 ]
ハゲドー
一年もかかってやっと1スレなペースだし

993 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 01:40:20 ]
>>983
> コンパイルエラーなどたいして問題じゃないけどね。

断言君さようなら


994 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 11:26:29 ]
断言君だって。なにその俺様用語w

オナニーマクロだらけの糞コード書いてる奴は
日本語にもそれが出るね。

995 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 12:12:24 ]
断言君 の検索結果 約 926,000 件中 1 - 10 件目 (0.27 秒)

996 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 12:25:58 ]
俺も>>983を支持する。
ランタイムエラーが恐ろしいのであって、
コンパイルエラーなどコンパイラとの対話交渉に過ぎない。

997 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 13:14:27 ]
てかさ、コンパイルエラーが出てたら、
そもそも実行ファイルはビルドされて無いんじゃないか?
ワーニングなら分かるけど。

998 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 13:49:38 ]
つぎスレ立てるかどうか迷っているんだが
このスレのタイトルをよく吟味したら

「統合」:いくつかの物を一つにまとめあわせること

このように辞書では出ている。
つーことは「STL相談室」も「BOOSTを語れ」も入らないよーな気がした。
それとも、ここのつぎスレが要らないのか?
そんな疑問を抱いてしまって、俺には次スレを立てる勇気がない。
さあ。次をたてる勇者はだれか。

999 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 13:53:56 ]
boostは微妙だがSTLスレもこのスレも必要なし
あっても混乱するだけ


1000 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 14:02:28 ]
STLを使うと実行ファイルのサイズが10倍になるから
スレは統合すべきだと思います。



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






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

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

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