C++

concept_map 使って AOP にゃ

concept_map 使って aspect-oriented に書こうとすると,異なる concept_map 導入する関数を各々書く感じになるんかにぇ? concept G<T> { void do(T &); } template<G T> concept SynchronizedG<std::pair<T, std::mutex>> : G<std::pair<T, std::mutex>> { void do(std::pair<T, std::mutex> &p){ std::unique_lock lk(p.second); G::</t,></std::pair<t,></std::pair<t,></g></t>…

Why I No Longer Like or Use C++

上を引用しておいて http://prophipsi.blogspot.com/2008/03/why-i-no-longer-like-or-use-c.html そういえば ABI 周りって C++0x 何か進展する見込みってあるっけ? move semantics なんて C++ 以外じゃまず要らんとですよ ま〜,少なくとも move semantics…

A Brief Introduction to Rvalue References

http://www.artima.com/cppsource/rvalue.html

tuple を受けて func(tuple.template get(), tuple.template get(), ...) な構文に forward する

技法思いついて iヽ、 /ヽ、____ _ノ _,.ゝ-=-<、__ フ _____ゝ'" `ヽ _ゝ `γ´ , 、 ヽ\ /! ,.イ /ヽ!、 ノヽ, /_メ」_ ゝ ', ゝ ./ l く i / ハ rト、 V´,. - 、ゝル ヽイ ./ / あたいったら天才ね ,.ヘi`レハ ハイヒ.! / i ヽ、/ / ', ヽ、ノi l " _ ".〈/ ハ /´゙〉 .…

placement insert

http://d.hatena.ne.jp/faith_and_brave/20080310/1205149207 いや,この暗黙の変換ははじかれるべきでしょう. conversion constructor が implicit なのか explicit なのかを識別するのは (concept がないと) 難しいと思うけれど,いずれにせよ, explicit…

concept のメモ

インタフェイス定義としてみたときの concept の特徴 concept の定義ってまんま純粋なインタフェイス記述だけど,他の OO な言語一般におけるインタフェイス定義のあり方から見ると 他のインタフェイスに依存する形のデフォルト実装が書けちゃうもん! conce…

あらやだ, new と auto って一緒に使えるようになる予定なのね

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf auto x = new auto('a'); // allocated type is char, x is of type char* (^o^)キャー

>>

そーいやまともに追いかけてなかったんですが,結局右シフト演算子の問題は後方互換性が無い方の解決策で落ち着きそうなんでしょ〜か? (以下は GCC 4.3.0 以降を利用することを前提としたコードです) // test.cpp #include <iostream> template<int I> struct X { static i</int></iostream>…

GCC 4.3.0 リリースキタ━━━━━━(゚∀゚)━━━━━━ !!!!!

ということで, GCC 4.3.0 で実験的に実装された C++0x フィーチャーと,目を離した隙にいつの間にかかなりの部分で総書き換わっちゃっている標準ライブラリについて,実際に GCC 4.3.0 でコンパイルできるコードでもって徹底解剖しちゃうお!

Move があっても,やっぱり Placement Construction は要るんじゃね?

なので http://d.hatena.ne.jp/Cryolite/20060728#p1 は取り消し. 現在は, move は placement construction の完全な代替にはなりえないため, move が標準ライブラリに導入されても,同時にライブラリレベルでの placement construction のサポートが望ま…

Placement Construction

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2345.pdf これ (placement insert の提案の元) 読んでも,配列ベースのコンテナ (std::vector/std::deque) については,placement insert と,右辺値で push_back/insert 呼ぶ場合との差異がやっ…

http://d.hatena.ne.jp/Cryolite/20080301#p18 このエントリ書いた子, variadic template の push_back の意味勘違いしとったね. (後ろに可変個数 append するヤツだと思ってた) この push_back って従来の push_back と最後尾への emplace 兼務するのな.

最新ドラフト通読してたら std::vector (っていうか Sequence) のインタフェースが地味に進化してることにいまさら気が付いて驚いてる人ここに見参. move 対応とか data とか cbegin/cend らへんに気を取られてたーよ. namespace std { template <class T, class Allocator = allocator<T> > class </class>…

↑↑ >3000個の int な std::set だと, std::sort では比較演算が支配的になって いや, std::set で,入っている値が random なら,1,2回の

↑あいや,ちょっと待たれよ.んなことよりなんで destructor も速くなってんのよ? move のおかげで memory fragmentation が抑止されたせいっぽ?

STL Benchmarks with Move Semantics

おー,このベンチマーク比較知らなかった. http://home.twcny.rr.com/hinnant/cpp_extensions/STL_benchmarks.html std::sort/std::rotate がなんで1000倍のオーダーで高速化されとるん? libstdc++ の std::sort/std::rotate って呼ばれる std::swap がコ…

不動点の話で全く関係ないことを思い出した

C++

boost::optional には,コピーコンストラクタと,型 T を持つオブジェクトからの変換コンストラクタがあります. template<class T> class optional{ ... optional(optional const &); optional(T const &); ... }; // class optionalで,昔,この2つのコンストラクタ</class>…

boost::optional に不動点ってないよにぇ?

C++

おぉーはぁーよぉー(^o^) (「〜リポD飲んで寝よう.」のエントリが執筆されてから,著者がリポDを飲み,布団の中に入ってから,何かを思いついて,布団を抜け出し, PC の前に着席し,本エントリの執筆が開始される,この間たったの5分) 「polymorphic lam…

↑そんな感想いらねー. polymorphic lambda は concept check と相性が悪いから難しいねぇ,というところまで理解したような気がするからリポD飲んで寝よう.

<= @ N2529

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2529.pdf lambda-introducer: < > < & > <= > < = >↑の3番目のを見て,ちょっとアホだなーとか思ったりなんかしてませんったら!

Range-based For-loop

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2394.html 前々からずっと思っているんですが, for という言語組み込みの機能 (制御構文) が Range concept という (どちらかといえば) ライブラリレベルの仕様に依存するのって,個人的にはあー…

右辺値参照型と左辺値参照型

右辺値参照型と左辺値参照型は, 異なった型として扱われるのと, 関数の戻り値型 (とキャストの型) に指定された場合に,その関数の呼び出し結果が右辺値として扱われるか左辺値として扱われるかが異なるのと, 参照への参照をただの参照に変換する規則 (re…

enable_shared_from_this があんまり好きになれないにゃー

boost::enable_shared_from_this ,あるいは一般に,単純な参照もしくはポインタによってオブジェクトが与えられたとき,そのオブジェクトへの boost::shared_ptr (共有セマンティクスを持ったスマートポインタ) を得ることができるインタフェイスを提供する…

lambda@C++0x - 値か参照か,それが問題だ

http://shinh.skr.jp/m/?date=20080213#p02 今の lambda@C++0x の提案は bind を作成する + bind に渡す関数の定義を inline に書ける,という理解でだいたいよいと思う.ので,「必要なものだけ boost::bind かそれに類するものにぶちこんで持ち運ぶ」のは…

polymorphic lambda があるとうれしいというのは

Boost.Lambda 使った以下のようなコードが map<string, int> m; map<string, int>::const_iterator ans = find_if(m.begin(), m.end(), lambda::_1.second == 42); こう,なんていうか,直感的な意図通り素直に通ってくれたらうれしいよねー,っていうのと大体同じ. (上のコードはもち</string,></string,>…

local class の linkage 変えようって話あったなぁ

lambda 周りの話の補助的な話として local class の linkage 変えようって話はあったにゃー. (lambda の話でどうして local class の linkage の話が出てくるのか即座に理解できる人は,多分,現在の C++ の local class の linkage (とテンプレートの型パ…

lambda で environment と polymorphic lambda の話って今どうなってんすか?

C++0x の lambda expression の話になるとき, syntax みたいなどうでも良い話 (いやまあぜんぜん良くないんですけれど!) ばかりが話題にされて,もっとこう重要なことに関する議論ってなかなか話題として盛り上がってこないにゃーといつも思うんですけれど…

move のみ可能で copy できないクラスかどうかを判定できない

move のみ可能で copy できないクラスが与えられたときに,それを判定する方法がないけどどうしたもんかにぇ? C++0x の std::is_convertible がまともに実装されないとどうしようもないという結論なんだけれども……. copy constructor はいかなる場合でも宣…

tuple を可変長多重継承で実装

tuple を可変長多重継承で実装する方法,つまり template<class... Args> class tuple : private /*ここで Args を tuple_elem<0, Args0>, tuple_elem<1, Args1>, ... のような形で展開したい */ { // ... }; 上記に相当する実装方法がないか1週間ぐらい考えてたけれど,さ</class...>…