meryngii.neta

今日も新たな"ネタ"を求めて。

2008-09-01から1ヶ月間の記事一覧

せっかくだからconst char*をRangeに

この前書いた記事はconcept_map Rangeがあるのかと思ったらconst char[]なだけだったというわけだが、 http://d.hatena.ne.jp/meryngii/20080927/1222494258 せっかくなので書いてみた。 #include <iostream> #include <cstring> #include <concepts> namespace std { concept_map Range<const char*> {</const></concepts></cstring></iostream>…

conceptでの...

Callableは関数オブジェクト用のコンセプトで、N2741だと汎用的にVariadic Templatesを利用して定義されている。 auto concept Callable<typename F, typename... Args> { typename result_type; result_type operator()(F&&, Args...); } operator()のところだけれども、これが「一定の数</typename>…

.NETのConsoleもどき

Variadic Templatesの練習のためにSystem.Consoleもどきを。 #include <iostream> #include <complex> struct Console { template <typename T, typename... Types> static void Write(T&& arg, Types... args) { std::cout << arg; Write(args...); } template <typename... Types> static void WriteLine(Types... args) { Write(</typename...></typename></complex></iostream>…

C文字列に拡張for文

C文字列に拡張for文を使ったら、普通に通った。 #include <iostream> int main() { for (char c : "test") std::cout << c << std::endl; } C++ユーザにとっては新鮮なコード。んでこれが通るということは、const char*についてのconcept_map Rangeがどこかにあるはず</iostream>…

Visual StudioでC++0xのキーワードを色分け

Visual Studioにはユーザーキーワードという微妙に便利な機能があるらしいです。 http://wikiwiki.jp/redstrange/?Microsoft%20Visual%20Studio%20%A5%E6%A1%BC%A5%B6%A1%BC%A5%AD%A1%BC%A5%EF%A1%BC%A5%C9 これはC++0xのキーワードを色分けするしかない! …

rel_ops

C++では==と!=のように片方だけあれば十分なものもすべて定義しなければならない。これを自動的に生成してくれるのがBoost.Operatorsなわけだが、標準ライブラリにもstd::rel_opsに比較演算のみ自動的に生成するものがあるようだ。 namespace rel_ops { temp…

conceptでのエラー

andLinux上でのConceptGCCのmakeに挫折したので、結局Cygwin上で試すことになった。 ものすごくコンパイルが長いけど、テスト版だからしょうがない。 #include <algorithm> int main() { std::sort(1, 2, 3); // ここでエラー } conceptg++ -o test test.cppなかなか簡</algorithm>…

ConceptGCCのビルドがうまくいかない

andLinuxでConceptGCCをコンパイルしてみたが、どうもうまくいかなかった。再度挑戦するときのために経過をメモしておく。 まず、おなじみのツールをインストールする。 apt-get install gcc apt-get install autoconf apt-get install makeGMPとMPFRが必要…

andLinuxインストール

andLinuxをインストールした。 http://d.hatena.ne.jp/wadap/20080602/1212419216 この手順通りにインストールしても、ネットワークにつながらなくなってうまくいかなかった。 調べてみたら、ルータのIPと衝突しているのが原因だった。 http://d.hatena.ne.j…

andLinux

C++0xのためにConceptGCCでも使ってみようと思い立ったので、せっかくなのでLinux上でやろうではないか。 でもWindowsをメインに作業しているので、いちいち変えるわけにもいかない。以前WubiでUbuntuを入れてみたわけなのだけれども、あまり手をつけていな…

複雑な宣言

C++

ほとんどC言語ネタなわけだが、C++0xの9月分のドラフトまでもう少しだと思うので、それまでつなぎを書いておく。 #include <boost/type_traits/is_same.hpp> #include <boost/static_assert.hpp> typedef int* DtoI(double); typedef DtoI* V10[10]; typedef V10* f(char); typedef int* (*(*g(char))[10])(double); B</boost/static_assert.hpp></boost/type_traits/is_same.hpp>…

serial_port

組み込みなんかでは、今でもRS-232Cを使う機会がある。 Boost.Asioではシリアルポートに対応しているようだ。単にネットワーク用のライブラリでは終わらないらしい。 ファイルもサポートするようだけれども、filesystemとの関係はどうなるんだろう。 http://…

プロ意識

C++

http://codezine.jp/article/detail/2971 Bjarne Stroustrup氏のインタビューが公開された。 プロ意識(Professionalism)というのは、責任と能力らしい。失敗が許されない分野のソフトウェアには、何らかの基準を設けて審査することも必要なのかもしれない。 …

basic_string

C++

C++の文字列処理は、何かと評判が悪い。 template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > class basic_string; typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; 批判はいろいろあるようだが、まず文字列を操作する関数が少ないことだ。文字列を文字</wchar_t></char></chart></class>…

noncopyable?

C++

noncopyableはコピーや代入を禁止するために使われる。C++0xにはこういう動作を禁止するための専用の構文(=delete)が存在する。 そういえば、noncopyableっていうスペルは本当に合っているのかという議論を見た記憶がある。 辞書に載っていないのが困った…

GUIライブラリ

C++

標準GUIとまではいかなくても、C++で書かれた近代的な設計のGUIライブラリが欲しい。 wxWidgetsはとても実用的だけれども、設計が古くてAPIをいじるのと同じ気分になってくる。Notusの設計はよかったけれども、企画倒れしてしまった。 最近のツールは華やか…

char16_tとchar32_t

Unicodeサポートのためのchar16_tとchar32_tは、C++0xで予約語になるようだ。 C99に合わせるために取り入れられるint32_tなんかは、名前が似ているがstd名前空間に入っている。 おそらく新しいプリミティブ型だからだろうと思う。

[]

統一された関数宣言構文というものがある。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2582.html template <class T, class U> [] mul(T x, U y) -> decltype(x * y) { return x * y; } うーむ、気持ち悪い。 class A { template <class T> [] operator[](T x) -> decl</class></class>…

caperのアクセス指定子

C#

%access_modifer ;宣言を追加。C#ジェネレータでParser/ISemanticAction/Tokenにアクセス限定子を付加します。 こう書いてあるのだけれども、実際に指定するとbad directiveだといわれる。 どうやらスペルが間違っているようだ。 %access_modifier internal;

縮図

人は胎児の間に、人類までの進化を早送りしたような成長をすると聞いたことがある。 考えてみると、その後勉強を始めてそれがだんだん難しくなっていくことも、人間が少しずつ学問を発展させてきたことと似通っているではないか。 現代では、人の一生は人類…

Google Chrome

Web

Googleがブラウザを公開した。 Chrome ブラウザ IEの独占時代から比べれば、ずいぶんと状況が変わったものだ。私はFirefoxを使っているが、選択肢が増えることは標準への意識が高まってよいと思う。こうやって少しずつ切り崩していくしかないのだろう。

参照におけるconstとvolatile

C++

volatileは主に組み込みで使われる機能で、constと同じ場所に置けるのでcv-qualifierとまとめて呼ばれる。コンパイラによる読み出しの最適化を抑制する効果がある。 さて、「constを指すポインタ」と「constなポインタ」があるように、「volatileを指すポイ…

継承におけるconst

C++

当たり前かもしれないが、constはクラスを継承するときに指定できない。 typedefを使っても無視される。 struct base { void non_const() { } }; typedef const base const_base; struct derived : const_base { }; void func() { derived d; d.non_const();…

Boost.Unitsのコンパイルが遅い

Boost.Unitsのコンパイルが結構遅い。 しらみつぶしに定義しているからだろう。 まあでもSpiritの比ではないか…。

演算子のオーバーライド

C++

前に演算子をオーバーライドしようとして失敗した記憶があるのだが、試しにやってみたらできた。 class a { public: virtual a& operator += (int) { } }; class b : public a { public: b() : sum(0) { } virtual b& operator += (int x) { sum += x; retur…