株式会社ロングゲート - 製品案内
プログラミング雑誌が正式に公開されたので、レビューでもする。ただし、私は常に、何事にも批判的な目を向けているので、自然とレビューも、辛口になってしまう。
Bjarne Stroustrupへのインタビュー 著者:本人
私が書いた。タイトル通り、C++の設計者にして最初の実装者であるBjarne Stroustrupへのインタビュー。C++0xについてと、C++の教育について論じている。
boost::serializationの紹介 前編 著者:近藤 貴俊
これもタイトル通り、Boost.Serializationの入門。
Variadic Templates お前を待っていた 著者:Egtra
Variadic Templatesを使って、Win32 APIのEnum系のAPIのラッパーを作る。あまり宜しくない。まあ、斬新な実装だとは思うけどさ。Variadic Templateをユーザーが直接使う必要はないだろ。それに、記事では結局、Enum系APIをそれぞれ個別にラップしていることには変わりないわけだ。じゃあ、これでいいじゃないか。
namespace Ezoe
{
namespace detail
{
BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam )
{
auto func = *reinterpret_cast< std::function< bool (HWND) > * >( lParam ) ;
return BOOL( func( hwnd ) ) ;
}
}
bool EnumWindows( std::function< bool (HWND) > proc )
{
return bool( ::EnumWindows( &detail::EnumWindowsProc, reinterpret_cast<LPARAM>(&proc) ) ) ;
}
}
使い方
// std::coutに流しこむ
void f()
{
Ezoe::EnumWindows(
[]( HWND hwnd ) -> bool
{
std::vector<char> buf( ::GetWindowTextLengthA(hwnd) + 1 ) ;
if ( ::GetWindowTextA(hwnd, &buf[0], buf.size()) > 0 )
{ std::cout << &buf[0] << std::endl ; }
return true ;
}
) ;
}
// std::wstringのstd::vectorに流しこむ
void g()
{
std::vector< std::wstring > v ;
Ezoe::EnumWindows(
[&]( HWND hwnd ) -> bool
{
std::vector<wchar_t> buf( ::GetWindowTextLengthW(hwnd) + 1 ) ;
if ( ::GetWindowTextW( hwnd, &buf[0], buf.size() ) > 0 )
{ v.push_back( std::wstring(&buf[0]) ) ; }
return true ;
}
) ;
}
Variadic Templatesは、確かにすばらしい。しかし、Joe Coderが使う必要はない。結局、この記事が何をしているかというと、劣化std::functionの実装なのだ。だったら最初から、std::functionを使えばいいのだ。Variadic Templatesは、いうなればアセンブリ言語である。アセンブリ言語はプロでなければ使えないように、Variadic Templatesも、プロが使うべきなのだ。それに、結局Boost.Fusionを使っているのであれば、Variadic Templatesを使う意味がそれほどあるとも思えない。他人の書いたマクロに頼って、マクロアセンブラーでアセンブリを書くようなものである。なおさら自分でVariadic Templatesを使う意味がない。Variadic Templatesは、std::fucntionを実装するためにあるのだ。
私の実装では、コールバック関数として、std::functionが渡せる。シグネチャは、引数からLPARAMを取り除いた形だ。コールバック関数としてstd::functionを渡せるようになれば、関数オブジェクトが渡せるというわけだから、可能性は無限だ。
Chronoライブラリで考える型システム 著者:melpon
C++の強い型システムの中で、単位を実装する話。1秒 + 1秒は、2秒になってほしい。しかし、1秒 + 1分は、61秒になって欲しい。これは、秒と分とは、時間という概念を指すのだが、単位が違うためだ。分とは、ご存知の通り、60秒のことである。
C++0xの新しいライブラリであるratioを引き合いにだしながら、単位をC++の型システムの上に落としこむ方法を論じている。
オーブンレンジクッキング 著者:高橋 晶
物事を広く浅く紹介するのは、アキラさんの十八番である。この記事では、Ovenという、変態的なライブラリについて述べている。このライブラリは、まあ、関数型言語の原理主義者には、好まれるのかもしれない。私は使いたくないが。
Hello, C++ World! 著者:稲葉 一浩
Let's Boostという、まあ、言い方は悪いが、猫でも分かる(笑)のBoost版のようなWebサイトの中の人。
単純なHello,worldプログラムに、以下にC++の複雑なしくみが潜んでいるかというお話。まあ実際、Hello,worldごときにADLを使うようなC++は、異常だと言わざるをえない。
Crawling in the Stream 著者:zak
この雑誌のイラストを描いた人。iostreamについて、型の如く説明している。まあ、iostream自体、プログラミングを勉強するときぐらいしか使わないから、あまり価値はないと思うのだが。
メタプログラミングノキワミ アッー! 著者:DigitalGhost
日本人で唯一、Boost.Preprocessorの実装を理解している人間。この記事では、一般人を対象とするため、嫌々ながらBoost.MPLを使っているが、おそらく彼の本心では、プリプロセッサーだけでやりたかったに違いない。
Boost.AsioによるHTTP通信入門 著者:clown
題名通り、Boost.Asioによるネットワークプログラミングの入門。Boost.Asioの実装はなかなかすばらしいので、是非とも使うべきだと思う。Windows環境でネットワークプログラミングをするのに、WinsockとIO completion portを直接書いたことのある身として、特にAsioを進める次第。
でも、実際に、移植を考える必要がなく、Windows環境だけでネットワークプログラミングをやれと言われたら、多分私は、Vista以降のthread poolを使って、結局IO completion portを直接使って実装するだろうと思われる。別に、IO completion portは難しくない。それよりiostreamの方が難しい。なにより、日本語がまともに使えないので、意味がない。
C++の歴史 著者:本人
私が書いた。コンセプトとしては、D&Eに載っていない、すなわち、D&E以降のC++の歴史の話である。D&Eが好きな人は、楽しめるだろう。
BoostCon2010体験記 著者:近藤 貴俊
BoostCon 2010の参加してきた近藤さんの体験談。いかにもステレオタイプな日本人っぷりをアピールし、以て外人をして日本人のイメージを一層固定化せしめることに尽力したらしい。それにしても、BoostConに参加したとはうらやましい。カネさえあれば私も行きたい。