GP

for each

あ〜もうくそぅ!!俺は↓がやりたいねん!! std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); FOREACH(it, v){ // ←これがやりたい.これがっ!! std::cout << *it << std::endl; }あーーー!!あーーー!!あーーーーー!!!!!11 何</int>…

素数を求めるプログラム

何か面白いことを思いつくたびにちょこちょこ書き溜めていて,その結果できあがった素数を求めるぷろぐらみゅ.VC7.1もしくはGCC3.4.2にBoost1.32.0の組み合わせで動作確認.それ以外で動くかどうかは知らないというか厳しいだろうなあ. ちなみに説明一切な…

コンテナのstrong typedef

(コンテナに限らず一般にAllocatorをテンプレート引数に取るクラスのstrong typedef) Allocatorをちょこっといぢる(ダミーのtagをテンプレート引数に持つdiscriminativeなAllocatorを作る.機能はstd::allocatorをパクるだけで可)だけでコンテナのstrong…

戻り値遅延評価付きファンクタ( + Boost.Range)

TR1でresult内部型(あるいはresult_of)による戻り値型の遅延評価機構の標準化の方向が示されたから,これでますますC++で柔軟かつ気軽ににgeneric programming / functional programmingを実践できる・・・ようになると良いなぁ.標準の関数オブジェクトは…

あ〜,MPLのラムダ(というかPlaceholder Expression)って気軽なわりにtemplate template引数の代替になったりtypedef templateの代わりになったりメタ関数クラスになったりもはやなんでもありだな,こりゃ.えげつなく強力.使い方次第でどうにでも化ける…

id:Cryolite:20041130のid:paserryさんのコメントへの返答

長くなっちゃったのでこっちに書きました. と言っても以下の文章のほとんどはhttp://www.cdiggins.com/bil.htmlに書いてあることそのまんまなんですが・・・. >なかなか使いどころが難しいのですが とりあえず,(旧来の)インターフェースというものがあ…

type dispatcher by mpl

#include <boost/preprocessor.hpp> #include <boost/mpl/pair.hpp> #include <boost/mpl/same_as.hpp> #include <boost/mpl/always.hpp> #include <boost/mpl/switch.hpp> #include <boost/mpl/bool.hpp> #include <boost/mpl/list.hpp> #define TYPE_DISPATCHER_MAX_ARITY 10 struct error_t; template<class T, class F>…</class></boost/mpl/list.hpp></boost/mpl/bool.hpp></boost/mpl/switch.hpp></boost/mpl/always.hpp></boost/mpl/same_as.hpp></boost/mpl/pair.hpp></boost/preprocessor.hpp>

Rangeライブラリの強化

http://lists.boost.org/MailArchives/boost/msg74311.php (boost.devel 2004/11/08~) キタ━━━━━━(゜∀゜)━━━━━━ !!!!! Here's a taste: for ( crange r(some_array); r; ++r) do_something( *r, some_data); キタ━━━━━━━(;゜∀゜)=3━━━━━━!!! Also, the libra…

swapについて

swapについて自分が考え・まとめていた問題があったんですが,以下のドキュメントがうまいことまとめてくれていました. http://www.octopull.demon.co.uk/c++/dragons/index.html#box2 ただ,このドキュメントにおける標準委員会の方向性についての部分, 3…

Concept Traits Library

http://lists.boost.org/MailArchives/boost/msg72739.php (boost.devel 2004/10/03~) ここで挙げられている問題(ファイル名制限のためにコンセプト名と異なるファイル名を採用しないといけない)もたしかにうなずけるけれど,自分としてはそれ以前の問題と…

ScopeGuard

"ScopeGuard"という話が出ていて「なんじゃそりゃ?」と思って少し調べてみたら以下のarticleにたどり着く. http://www.cuj.com/documents/s=8000/cujcexp1812alexandr/ オブジェクト("guard"と呼ばれる)がスコープを外れるときに,コールバック関数を呼…

続:関数のオーバーロードと関数テンプレートの特殊化

となると template<class T> void f(T); // A template<class T> void f(T*); // B template<> void f<int>(int*); // C int i; f(&i); // Cが呼ばれるtemplate<class T> void f(T); // A template<class T> void f(T*); // B template<> void f<int*>(int*); // C int i; f(&i); // Bが呼ばれる当然こうなる</int*></class></class></int></class></class>…

関数のオーバーロードと関数テンプレートの特殊化

#include <iostream> template<class T> void f(T t) { std::cout << "A" << std::endl; } template<class T> void f(T *p) { std::cout << "B" << std::endl; } template<> void f<>(int *p) { std::cout << "C" << std::endl; } int main() { int i; f(&i); }「さて,どのfが呼ばれるで</class></class></iostream>…

動的多相性の後付け

動的多相性を後付けできるか考えてみる. 結論:「出来るけど('A`)ノ マンドクセー」 #include <iostream> class triangle { public: void draw() const { std::cout << "triangle::draw" << std::endl; } }; class rectangle { public: void draw() const { std::cout </iostream>…

内部型またはメンバの有無を調べるメタ関数

id:Cryolite:20040911#p4の続き.元記事は↓. http://lists.boost.org/MailArchives/boost/msg70844.php 詳細については必ず元記事とそこからたどれるpaperを参照してください. 以下のコードはVC++7.1でのみ動作を確認. #include "concept.h" // 記事中か…

Move Semantics

C++プログラマーで値あるいはオブジェクトの「コピー(Copy)」 その操作は構文としては代入演算子"="で表現されます. 一方,比較的新しい概念として「移動(Move)」と呼ばれる操作が存在します.左矢印の" int i = 3; int j = 1; j <- i; // jは3になる.iが…