2005年6月 8日

(((foo))) in C++

Scheme の

gosh> (define (foo) foo)
foo
gosh> (((foo)))   ; いくらでも括弧を増やせる

みたいなことは C じゃできないよね、と知人に訊いたところ、C++ ならできるよ、と教えてもらった。

class Foo {
public:
    Foo& operator() () { return *this; }
};
int main(int argc, char *argv[])
{
    Foo foo;
    foo()()(); // いくらでも括弧を増やせる
    return 0;
}

boostコマンドラインオプション解析ライブラリでは、同様の方法を使ってオプションの定義を書くようだ (参考)。