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 あたりに。
758 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 22:47:57 ] >>757 vtableを避けるための小細工なんです 眉をしかめる人が多いと思いますが、自分しか使わないのでお見逃しを
759 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 23:36:56 ] >>758 よくわからないな。>>753 のを template <class T> class baa{ protected: int n; public: baa() : n(777){} }; とすると VC6 だと vtable に関して状況が変わるの?
760 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 23:51:14 ] 753がprotectedを知らなかったというオチ?
761 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 00:21:24 ] >>759 失礼、深読みしすぎてました。 しかしすいません、そうなると>>757 で頂いたレスの意図が分からないです。 protectedすると、引数で他のbaaを受け取ったとき、nにアクセス出来るのでしょうか。
762 名前:760 mailto:sage [2005/07/24(日) 00:40:00 ] 753のコードでは、bar<T>::nがprotectedならfoo<T>::set_valの中でarg.nにアクセスできると思っていたがそうではなかったようだ。 スマソ
763 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 01:03:17 ] >>761 アクセスできると思ってた。けど間違ってたのなら失礼。 ・基本 class から 派生 class を public 継承したとき、 ・基本 class の protected member である n について、 ・派生 class から this の n にアクセスできる。 ・派生 class から this 以外の n にアクセスできない。 ということかな?も一回勉強しなおそ。 ・ある class の private member である n について、 ・その class から this の n にアクセスできる。 ・その class から this 以外の n にアクセスできる。 というのは間違いないと思うんだけど。 あと自分の VC7 は、これに関して template class かそうでないかによって コンパイル結果が違うのもよくわからない。
764 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 02:17:54 ] 勉強しなおした。>>763 は間違い多数につきスルーよろしく。失礼しますた。
765 名前:デフォルトの名無しさん mailto:sage [2005/07/28(木) 18:38:46 ] Compile-time if で型でなく値を返すにはどうすればいいのでしょうか? int v= boost::mpl::if_c< (sizeof(T) <= sizeof(double)), 10, 20 >::Value はだめでした
766 名前:デフォルトの名無しさん mailto:sage [2005/07/28(木) 19:41:12 ] >>765 boost::mpl::int_ を使って、型にマップすればいい。
767 名前:デフォルトの名無しさん mailto:sage [2005/07/28(木) 19:56:38 ] >>765 struct R0 { enum {value = 10}; }; struct R1 { enum {value = 20}; }; template <typename T> int func () { typedef typename boost::mpl::if_c <(sizeof (T) <= sizeof (double)), R0, R1>::type Result; return Result::value; }
768 名前:デフォルトの名無しさん mailto:sage [2005/07/29(金) 10:42:43 ] template<CONTANER> class CmyContaner { typedef CONTANER::iterator iterator_type; }; としたらコンパイル通らなかったんですが、 CONTANER::iteratorはできないってことなのでしょうか?
769 名前:デフォルトの名無しさん mailto:sage [2005/07/29(金) 11:35:24 ] >>768 -typedef CONTANER::iterator iterator_type; +typedef typename CONTANER::iterator iterator_type;
770 名前:デフォルトの名無しさん mailto:sage [2005/07/29(金) 15:37:41 ] そのままじゃ型名かメンバ変数かわからんからね。 > CONTANER 北斗の拳の主題歌を思い出すスペルミスだな。
771 名前:デフォルトの名無しさん mailto:sage [2005/07/29(金) 16:46:27 ] >>768 ここもだね -template<CONTANER> +template<typename CONTANER>
772 名前:デフォルトの名無しさん [2005/07/30(土) 08:40:48 ] template<Functor> class MyMethod { public: Functor f_ MyMethod(Functor f):f(f_) {} value() { f_(10); } }; class MyClass { public: struct MyFunctor{ operator()(int a) { std::cout << a; }myFunc; //MyMethod<MyFunctor> myMethod(myFunc);//コンパイル通らない MyMethod<MyFunctor> myMethod(MyFunctor);//なぜかコンパイル通る value(){ myMethod.value();//左側がクラス 構造体 共用体でありません と怒られる } }; クラスの中でfunctorを定義したら動かなくなりました。 回避方法はないのでしょうか?
773 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 09:48:49 ] >>772 >クラスの中でfunctorを定義したら動かなくなりました。 クラスの外でfunctorを定義したらそれ動く?
774 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 13:47:17 ] >772 とりあえず } が 1 個足りない。 } myFunc; の前に 1 個ある、でいいのか? >MyMethod<MyFunctor> myMethod(MyFunctor); これだと MyFunctor 型の引数をとり、MyMethod<MyFunctor> 型を返すメンバ関数 myMethod を 宣言しているんじゃまいか? >//MyMethod<MyFunctor> myMethod(myFunc);//コンパイル通らない なんでメンバ変数を宣言してるのに初期化しようとしてるの? MyMethod<MyFunctor> myMethod; MyClass() : myMethod(myFunc) {} じゃねーのか?あと↑だと myFunc との初期化順序が問題になる場合があるかも。 今回の場合、MyClass() : myMethod(MyFunctor()) でいいような気もするが。
775 名前:772 [2005/07/30(土) 14:59:26 ] すみません } が1つぬけてました。 template<Functor> class MyMethod にclass の外で定義したfunctorを使うと 意図したとうりの動きをすることを確認しています。
776 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 15:06:57 ] >>775 >class の外で定義したfunctorを使うと >意図したとうりの動きをすることを確認しています。 本当に? コピペにかなりミスがあると思うよ MyMethod::value() MyClass::MyFunctor::operator()(int a) の返値の型は? もし本当に動くなら処理系を教えてね
777 名前:776 mailto:sage [2005/07/30(土) 15:09:07 ] たぶんこんなことしたいのかな template <typename Functor> struct MyMethod { Functor f_; MyMethod (Functor f): f_(f) {} void value () {f_ (10);} }; struct MyClass { struct MyFunctor { void operator () (int a) { std::cout << a; } } myFunc; MyMethod <MyFunctor> myMethod; MyClass (): myFunc (), myMethod(myFunc) {} void value() {myMethod.value();} };
778 名前:デフォルトの名無しさん mailto:sage [2005/08/02(火) 22:23:20 ] template<X> class CHoge {public: CHoge( X= typeof(x) ) {} }; なんてできないの? 自動で型判別してほしい。 自動判別した型を使ってCompile-time Ifもできるとさらにいいんだけど
779 名前:デフォルトの名無しさん mailto:sage [2005/08/02(火) 23:18:35 ] >>778 >自動で型判別してほしい。 >自動判別した型を使ってCompile-time Ifもできるとさらにいいんだけど これらはできるけど 例で何がしたいのかさっぱり分かりません
780 名前:デフォルトの名無しさん mailto:sage [2005/08/05(金) 23:15:18 ] template< ArrayType > function( ArrayType array) { Compile-time If (ArrayType はポインタの配列?) { int a= array[0]->value; }else{ int a= array[0].value; } こんなことがしたい
781 名前:デフォルトの名無しさん mailto:sage [2005/08/05(金) 23:30:47 ] type_traitsでいいんじゃないの?
782 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 00:52:15 ] 個人的には値の配列とポインタの配列を静的多相に扱おうとする行為そのものに 異議を申し立てたい.
783 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 02:36:31 ] 次のようなコードが、Visual C++では通るけどGCCでは通りません。 オブジェクトの名前と番号の型を保持する構造体を用意 template<class S,class I> struct Types { typedef S String; typedef I Integer; }; この定義を受け取って型を定義するベースクラスを作成 template<class T> struct Base { typedef typename T::String StringType; typedef typename T::Integer IntegerType; }; そして、これを利用するサブクラスを作成。 template<class T> struct Derived : public Base<T> { StringType name; //!< ここでコンパイルエラー IntegerType number; //!< 同様 }; typedef Types<std::string,int> StdTypes; Derived<StdTypes> derived;
784 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 02:38:23 ] 続き 以下のように書けばGCCでもコンパイルは通ります。 typename Derived::StringType name; typename Derived::IntegerType number; こんな面倒な書き方しかできないなら、 わざわざベースクラスにtypedefした意味がないんですが 何かいい方法ありませんか?
785 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 02:58:54 ] >>783-784 Base の定義中に typename が必要な理由を知っていれば、無理だと予想が付くだろうに。
786 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 07:54:33 ] >>783-784 俺だったら Base::Stringと書けないか Derivedの中にusing Base::String;と書けばStringが使えないか の2つをまず試してみる。これでできるかどうかはもちろんしらんが。
787 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 09:04:33 ] Baseを使うなら、 typename Base<T>::StringType name; typename Base<T>::IntegerType number; こうなるから、これこそ、 > わざわざベースクラスにtypedefした意味がない ので、>>784 のやり方が良いだろう。 VC++もそのうち>>783 は駄目になることでしょう。
788 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 09:32:41 ] >>784 それVC7.1のバグらしい。 面倒見が良すぎて、typenameを本来ならば書かなければならない 所を、曖昧さがない場合は無くても通してしまう。 VC7.1でもちゃんと typename は書くべき。
789 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 12:59:29 ] このスレの難読コードをみて おれにとて C++はなかたことになた
790 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 13:03:53 ] そんなだから、未だに君にとってこの程度が「難読コード」なんだよ。
791 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 13:07:40 ] 俺もtemplateのコードは可読性が低いと思うよ 唯一の弱点だな
792 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 13:32:35 ] テンプレートとC++「本体」って明らかに別の言語だよな。 概念の異なる2つの言語が混在してるんだから、 可読性が低いのは当たり前。
793 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 15:19:32 ] >>792 じゃあどういう構文にすればいいよ?
794 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 19:15:56 ] 構文の話なのかな。
795 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 19:21:27 ] >>784 template<class T> struct Derived : public Base<T> { typedef Base <T> Base_; typedef typename Base_::StringType StringType; typedef typename Base_::IntegerType IntegerType; StringType name; IntegerType number; };
796 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 20:27:48 ] >>795 意味無いじゃん。
797 名前:神゜ mailto:sage [2005/08/06(土) 20:49:53 ] そろそろ俺の出番か?
798 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 21:04:29 ] >>784 ベースクラスがテンプレート依存でなければ StringType,IntegerType は見えるが、そうでない場合は 795 のように書く必要がある。 実はずっと前の GCC で VC7.1 みたくエラーにならない時期が あったんだが、バージョン上げたらエラーになったんで仕様を 確認したことがあったのを思い出したよ。
799 名前:デフォルトの名無しさん mailto:sage [2005/08/06(土) 23:17:54 ] >>798 2.95あたりは確かそうだったね
800 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 16:48:53 ] template<class A> struct Foo { template<class B> struct Bar { }; }; このBarだけを特殊化するのって、GCCでは template<>template<> struct Foo<int>::Bar<int> って書かなきゃならないんだね。 VC++7.1では template<> struct Foo<int>::Bar<int> で通るんだけど、これはバグなのかな?
801 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 16:55:26 ] >>800 どっちが規格に準じてるかによるね
802 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 17:00:26 ] >>800 14.7.3.17 より "If the declaration of an explicit specialization for such a member appears in namespace scope, the member declaration shall be preceded by a template<> for each enclosing class template that is explicitly specialized." template<> template<> ... と繰り返すのが正解っぽい。
803 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 17:10:09 ] >>800 gccを信じてそちらに合わせておけ。
804 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 17:27:08 ] >>800 gccのバージョンは何? g++ 3.3.5 だとそれ両方とも通るんだけど 新しいのは通らないのかな?
805 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 18:19:07 ] template <class T> typename enable_if<boost::is_integral<T>, void>::type foo(T t) {} で関数を定義したりできないのはわかるけど これでclassのコンストラクターを定義したりしなかったりを決めると コンストラクターに戻り値が定義されています と怒られる。何か方法ないのでしょうか? template <class T> class A{ typename enable_if<boost::is_integral<T>, void>::type A(T t) { } }
806 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 18:44:57 ] >>805 SFINAEは戻り値の型でやる方法と(デフォルト)引数の型でやる方法の2通りできて, コンストラクタの場合は戻り値の型を指定できないですから引数の型のほうでやります. template<class T> class T{ A(T t, typename enable_if<boost::is_integral<T> >::type * = 0){} }; こんな感じで.逆に演算子関数の場合は余計なデフォルト引数を指定できないので 戻り値型で,という感じになると思います.
807 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:38:01 ] enable_ifが何をするもんなのか、未だにわかんねえ。 てか、何年英語の勉強してもboostのドキュメントさえ読めない俺ってすげえよ。 よっぽど英語の才能が無いんだな。
808 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:41:04 ] テメェは自己紹介がしたいだけだろ 分からねぇんだったらイチイチ出てくんな
809 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:50:40 ] >>807 SFINAEによるオーバーロードセットのコントロールを簡単に 行うためのユーティリティ。 英語分からなくてもC++分かるんならひたすらソース詠めば 何となく見えてくる、かもよ。
810 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:53:46 ] >>808 なにキレてんのキミ。 相手以上の駄レス書いてたら意味無いのに。
811 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:59:07 ] 駄レスとかいってたら、ほとんどがそうだろw
812 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:00:10 ] ほとんどがそうならなおのこと 突然特定のレスにキレる理由が無いよ。
813 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:03:27 ] 自己顕示欲丸出しの厨房がウザイだけだろ まあ、どこにでもいるからいちいちキレるのもどうかと思うが
814 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:16:33 ] キレて説教するほうがよっぽど自己顕示欲激しいと思う。 世に言う自爆ですな。アホくさ。
815 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:17:52 ] www.boost.org/libs/utility/enable_if.html ここの「1.2 Background」は、何が問題だって言ってるんですか?
816 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:20:01 ] 説教がどう自己顕示欲につながるんだ??
817 名前:デフォルトの名無しさん [2005/08/07(日) 23:22:14 ] >>814 ワロス
818 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:29:27 ] >>816 キレるたびにいちいちスレ違いの書き込みするような奴が 自己顕示欲薄いって言い張る気?
819 名前:デフォルトの名無しさん [2005/08/07(日) 23:30:34 ] enable_ifがわからんってののどこが自己顕示欲に繋がるのかもわからんけどな
820 名前:デフォルトの名無しさん [2005/08/07(日) 23:30:49 ] >>818 藻前もキレてるじゃん あと煽り耐性なさ過ぎ いい加減スルーしろよ
821 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:31:47 ] >>815 いや,そこの部分は別に何かが問題だなんて書いてないです. 単にSFINAEというのがどう機能するか(そしてなぜそのような機能が必要なのか) を説明しているだけです.
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には型指定の構文があるくらいだし。