Generic Programming with C++ Template
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG参考図書:
Modern C++ Design
Andrei Alexandrescu, Addison-Wesley, ISBN:0-201-70431-5
(訳書: ピアソン・エデュケーション, ISBN:4-89471-435-3)
http://cseng.aw.com/book/0,,0201704315,00.html
Generic Programming - STL による汎用プログラミング
Matthew H. Austern, ASCII, ISBN:4-7561-3441-6
関連スレッド:
C++相談室 Part3
http://pc.2ch.net/test/read.cgi/tech/1003832761/
STL スレッド
http://pc.2ch.net/test/read.cgi/tech/1004287394/
0693デフォルトの名無しさん
NGNGVC++6で、double即値、char即値ともつっこめますた。
0694648
NGNG死のう。
0695デフォルトの名無しさん
NGNGオブジェクト作るなって言いたいんじゃないのか?
そういう点でみれば>>692のは激しく的はずれ
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNG最近のPCは速いし。
0698デフォルトの名無しさん
NGNG0699デフォルトの名無しさん
NGNGgapped buffer って、バッファの内容をカーソル位置で分割して管理する方法だよね。
それだと、コストはこうじゃないかな。
gapped buffer
一文字追加、削除 O(1)
指定行の移動 O(バッファの総文字数)
リスト
一文字追加、削除 O(一行の文字数)
指定行への移動 O(ファイルの行数)
gapped buffer は「普段よく使うのは一文字単位の追加・削除だから、こっちを
早くしたほうが快適だ」という信念に基づくデータ構造だと思うよ。ついでに、今
時の PC を前提とするなら、どっちでも早すぎて変わらん。
0700デフォルトの名無しさん
NGNGこれだと先頭から終端までジャンプするのに、バッファのコピーが発生するよね?
めちゃくちゃ遅くならない?
0701デフォルトの名無しさん
NGNG挿入・削除のタイミングでバッファ内の整理をすればよいので
全然そんなことない。
極端にでかいファイルもストレスなく開けるようにするのに便利。
0702デフォルトの名無しさん
NGNG何か書き換え始めたら行編集バッファにコピーしてきて編集し、
カーソルがその行から出たりするタイミングで書き戻してたっけ。
0703デフォルトの名無しさん
NGNGhead part cursor tail part
|-----------| + |------------|
こんな感じで持つ構造と考えて良いのでしょうか?
それとも、下の様にいくつかのフラグメントに分けて保存して、
編集時のコピー量を少なく納める構造なのでしょうか?
|-----| |-----| |----+-| |------|
日本語のサイトをいくつか検索しても、
どっちとも取れるようなどっちも違うような記述でよく分かりません
0704名無しさん
NGNG>>700
正直、editorならほとんど変りがない。今や一番重いのはGUIの描画。
0705デフォルトの名無しさん
NGNGカーソル位置とギャップ位置は関係ない
ギャップは普通エディットしている部分に作られる
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=utf8&oe=utf8&q=%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%90%E3%83%83%E3%83%95%E3%82%A1
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNGここにあるな
0711デフォルトの名無しさん
NGNGSTLPortのlower_boundに不具合があるんですけど、
どうにもならないですかね。
0712デフォルトの名無しさん
NGNGlower_boundにどんな不具合がありますか?
0713デフォルトの名無しさん
NGNGぉ!
Generic Programing and the STL見てみたら、
STLPortの動作のほうが正しいですね。
// MSDNには書いてない新たな条件が・・・
LokiPortのほうの使い方に問題があるみたいですね
0714デフォルトの名無しさん
NGNGちょっと前、Lokiの移植で話題になってたVCで
テンプレートの部分的な特殊化をエミュレーションしてる部分に
こんなコメントかいてあるんだけどあれのどこが not legal なの?
ーー以下引用ーーー
// the following VC6 specific implementation is *NOT* legal
// C++, but has the advantage that it works for incomplete
template<class T1>
struct is_same_part_1 {
template<class T2> struct part_2 { enum { value = false }; };
template<> struct part_2<T1> { enum { value = true }; };
};
ーー引用ココまでーー
他のコンパイラでは動かないのかな?
0715デフォルトの名無しさん
NGNGLokiを使えますか?
0716デフォルトの名無しさん
NGNG過去ログよめ
0717デフォルトの名無しさん
NGNG過去ログにはVC++.NETとあるだけなので、VisualStudioなのか
.NET Framework SDKだけでも大丈夫なのかわかりませんが。
0718デフォルトの名無しさん
NGNG一応、最適化のオプションが使えなくなってるだけで、
あとは普通にManagedも吐ければ、通常コンパイルもできる
まずは使ってから質問しろ。
lokiが使いたいだけならgccにしろ。
0719デフォルトの名無しさん
NGNG使うかどうかまだ決めてないんで。
情報どうも。
0720デフォルトの名無しさん
NGNGLokiPortを使えば?
http://www.geocities.com/rani_sharoni/LokiPort.html
0721デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNGg++だといけるんだけど。
0724デフォルトの名無しさん
NGNGそれがGeneric Programmingと何の以下略
0725デフォルトの名無しさん
NGNGコンパイラへのプログラミングにおいて
限られた道具が増えることは、かなり重要なことだと思うけど・・・
今のところ、どう使うか考えてるところではあるんだけどね:)
0726デフォルトの名無しさん
NGNG(まぁ C++ の template 自体、完全実装してる処理系はほとんどないから、
処理系依存に近いのが現状だけどさ)
0727デフォルトの名無しさん
NGNGhttp://www-cdserver.fnal.gov/cd_public/sag/J16/J16_files/slide0042.htm
• typedef templates:
template< class T >
typedef std::map< std::string, T > Dictionary;
Dictionary<double> d;
Dictionary<PhoneNumber> phonebook;
• typeof() compile-time operator:
template< class T >
void foo( T t ) {
typeof( f(t) ) y = f(t);
… ;
}
こりゃ凄いと思うがどうよ。
0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG標準に含めて欲しいっていう提案はされてるみたい
0732デフォルトの名無しさん
NGNG0733標準化委員会
NGNG0734デフォルトの名無しさん
NGNGg++ってあれだけがんばってるのに、ユーザーは
相変わらずCでゴリゴリ書くのが好きな人ばっかりで、
なんか哀れだよね。
0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNG劇的にコーディングスタイルが変わりそう。
0737デフォルトの名無しさん
NGNGマクロプログラミングですか?
イヤだなぁ
0738デフォルトの名無しさん
NGNG#define foreach( itr, cont ) for( typeof( (cont).begin() ) itr = (cont).begin(); itr!=(cont).end(); ++itr )
0739デフォルトの名無しさん
NGNGtemplate<typename A,typename B>struct TSA{TSA(){cout<<"A"<<endl;}};
template<>struct TSA<T,int>{TSA<T,int>(){cout<<"B"<<endl;}};
template<>struct TSA<T,double>{TSA(){cout<<"C"<<endl;}};←これが警告になって、しかも無視されるのがわからない。なんで?
};
0740名無しさん@カラアゲうまうま
NGNG0741デフォルトの名無しさん
NGNGconst char* を受け取れるようにしとけば動作するけど、
template< unsigned N > f( const char (&x)[N] );
にバージョンを用意しとけば、文字列リテラルを受け取ったときに、
N で文字列長を受け取れる分、より効率的に処理できるようです。
ですが、↑みたいなテンプレートを使ってるのをほかで見たことがありません。
なにか問題があるからなのでしょうか?
それとも、見つけれて無いだけで、めずらしくもない方法なんでしょうか?
0742デフォルトの名無しさん
NGNGboos::type_traits::is_array
0743デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNG環境依存な部分も少なからずあるみたい。
ただ単にサイズを自動的に取得したいという目的ならば不要かと。
const char* との共存ができないようだし。(VC7)
普通にstring(literal, sizeof(literal))で問題無いかと。
0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNGこの業界辞める。もっとらくちんなの希望。
0748デフォルトの名無しさん
NGNGライブラリ作るのとそれ使うのとでは全然違うと思われ
0749デフォルトの名無しさん
NGNG激しく同意。
STLのように使うだけのライブラリとはちょっと違う。
プログラム設計において根本から変わってしまうような
ものだと思う。
というかそろそろ言語の機能をフル活用しなければならない
っていう呪縛から逃れたいところだね。C++使ってるひとには
自分も含めて、この傾向が強いから。
0750デフォルトの名無しさん
NGNG……と思ったが、そうすると他人のプログラムの保守ができんな。
0751デフォルトの名無しさん
NGNGtemplateなんて特にそうだと思うぞ。
俺は無いと困るみたいな状況に陥ったことがないので、
使ったことは無いが。w
0752デフォルトの名無しさん
NGNG> 機能は、必要を感じた時に初めてその使用の検討をするべき。
とはいえ、全く知らないと
これを使えば簡単に済むのに
っつーことに気づかぬ罠。
0753デフォルトの名無しさん
NGNGその辺だけ使えればいいんじゃないの?
構文汚いけど。
0754デフォルトの名無しさん
NGNG0755デフォルトの名無しさん
NGNGさてこれをどう使ったらいいものやら。。
0756デフォルトの名無しさん
NGNGクラスのメモリレイアウトをコントロールできない。
というわけでスクリプトでプログラムを書くときのように
手軽に、巨大なシステムを構築してしまいたいが型は
大切にしたいとき(どんなときだ?)に使う。
0757名無しさん
NGNG「プログラム設計において根本から変わってしまう」ことと、
「言語の機能をフル活用しなければならない」は相関性弱いと思うが…
後者は実装の話でしょ。
俺はcompilerのerror messageさえなんとかなれば、Lokiくらいは容認。
0758デフォルトの名無しさん
NGNGLoki使いまくり。正直、もう昔のGoF本に載ってる
ような野暮ったいコーディングには戻れない。
Typelistは最初は違和感あるけど、我慢して一ヶ月ぐらい
使いつづければ誰でも慣れる。typelistの新たな
使い方を考えるのはかなり厳しいが、MCDの
本に載ってるようなDPへの適用を真似る程度であれば
大したことはない。
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNG「恥ずかしいことしてるのばれちゃってるのに・・」
3人はイチゴの顔をじっくりみつめる。
そしてその中の1人がそっと言った。
「しかたないわ、あ私たちめくるのやめるわ。」
イチゴはほっとした。
『許してくれるんだ・・・・』
「ありがとうございます・・・・」
0762デフォルトの名無しさん
NGNGほえ?
0763デフォルトの名無しさん
NGNG0764デフォルトの名無しさん
NGNG現在の ANSI C++ 決めるまでにかかった時間から考えて、次の ANSI C++ 規格
が出るのは
話し合いが始まる 2005年
リリース目標 2008年
実際に決まる 2010年
ぐらい?
0765デフォルトの名無しさん
NGNG実際に実装される 前に次の標準の話し合いが始まる
無限ループ?
0766デフォルトの名無しさん
NGNGSQL99みたいになっても意味無し男
0767デフォルトの名無しさん
NGNGVC++はそのころになっても現在の規格にすら準拠できてなさそうだな・・・(鬱
0768デフォルトの名無しさん
NGNG致命的なバグでも見つかったとか?
一番実用的なアイディアだと思っただけに残念。。
0769デフォルトの名無しさん
NGNG0770763
NGNGhttp://std.dkuug.dk/jtc1/sc22/wg21/
0xだそうだからあと7年以内になんとか。
0771デフォルトの名無しさん
NGNGあと7年・・・それまでにパソコン業界はどうなっているのだろうか?
ハードディスク1TB超、CPU10GHz、メモリ10GBなんてのは当たり前に
なってそうだ。いや、これくらいなら4年もあれば実現する。
(C++)++ってのは文法違反か?
0772デフォルトの名無しさん
NGNG基本は省電力モードで休眠状態。
いわゆる論理区画みたいなもんかね。
そうなっているとすれば、そのころのOSの役割は
本来の資源管理にのみ特化しててもよさそうだね。
0773デフォルトの名無しさん
NGNGCの型(というか多重定義演算子の定義のされ方)による。>>771
0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNGなるほど。基本型はエラーになるようだ。
>>774
Cを拡張したのがC++だけど、もうこれ以上小手先だけで拡張できない
ほどメチャクチャになっているので、新しい言語を作った方がいいような
気がする。
CPUで言うと丁度x86みたいな様相を呈しているからな・・・・・
0776デフォルトの名無しさん
NGNG"..."とかも。(そうなるとModern C++ Designが困るのだが)
あとグローバル変数も要らん。
0777デフォルトの名無しさん
NGNGつまらん。
0778デフォルトの名無しさん
NGNGC++ - C ってことは、言語名は ++ ですか?
>>775
確かに template がらみだと、
「たしかに template 使えばできるけど、あまりに直感的じゃない。言語の方で
直にサポートしてくれよ」
という機能も多いよな。でも template がこんなに強力な代物だとは、出てきた
当時は思いもよらなかったよ。
0779デフォルトの名無しさん
NGNGそれをベースに型推論を導入してテンプレート宣言はやめる。
代わりに仕様として部分評価を導入して生成的プログラミングスタイルをサポート。
(つまり関数はデフォルトで暗黙のうちにテンプレート関数なわけ。値による特化は部分評価技術で。)
ただクラス・テンプレートの宣言をどうするかはちょっと迷うところだ。
関数型言語のように構築子を強化してクラス宣言を特殊な関数宣言とみなして
構造体アクセスのパターンマッチング機能と組み合わせてと言う路もあるが、
あまりにもCらしさからかけ離れてしまう気がするし。
(命令型C風MLみたいになってしまう。)
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG型推論は、強い型付けと矛盾しないけど。
0782デフォルトの名無しさん
NGNGあ、そなの?MLとか知らないからよく分からんけど。。
その辺は他の言語もやってみないとダメだね。
0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNG自著で名前を何回も出すぐらいだからかなり知ってるのかもね。
0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNGす以前に、リストにアルゴリズムを施したりファンクタ
つくらせてカリーイングやったりという近年のC++の傾向そのもの
がオブジェクト指向と別方向の関数型言語指向なわけで。
lispと違って、それなりのパフォーマンスを維持しつつそういう
遊びがあるところに近時のC++の長所があると。
ただ実用から行くと、Java + generics + メモリ直接操作 くらいが
受けのいいところでしょ。
どうせ次期標準C++なんていってもせいぜい確率高い順に
hash_map他のSGI拡張、boost等のスマートポインタ、正規表現、数学等のライブラリが入るかどうか
サイズ規定のプリミティブ型が入るかどうか
typeofやらclosure/delegateやらの言語拡張が入るかどうか
マルチスレッドやネットワークのサポートが入るかどうか
とかだろ? しかも付け加えてばかりでは実装上文句が出るはず
だけど具体的にどこってのは全然見えない。そもそもVC++8のリリ
ース時期に合わせないと誰も使わないだろうな。
C99と互換性無いと駄目とかそっちの方がむしろ主流ではないの。
0787デフォルトの名無しさん
NGNG同じ文章をどこかで見たことがある気がする(デ・ジャ・ヴ?)
長所禿同
C++には多少手を加えるにしても全体としては今のままを維持してホスィ・・・
OOPらしいOOPがやりたい人はJavaでもC#でもやってりゃいいんで
0788デフォルトの名無しさん
NGNG今ある規格には準拠して欲しいとも思うがね。
それよりコンパイラのバグ減らせ!
0789デフォルトの名無しさん
NGNG下の結果が3ではなく、4になってしまうのですが、
どうしてでしょうか?
int i = 1;
std::cout << (_1 + i)(i = 2) << std::endl;
0790デフォルトの名無しさん
NGNGそれにスレ違い
0791デフォルトの名無しさん
NGNG別にスレ違いじゃないだろ。genericsがらみだし。
>>789
boost 1.23??
0792デフォルトの名無しさん
NGNG一つ言えることは _1 + i と i = 2 のどちらが先に実行されるかわからないのだから
そういう書き方をしてはダメってことだ
■ このスレッドは過去ログ倉庫に格納されています