C++

string::npos

C++

ref:c⌒っ_д_)っ←のや - うわらばー この辺の不思議仕様がさっぱり分からない。nposとか言わずに-1って書いてよ! いや、不思議仕様でも何でもなくて、npos は std::string::npos。-1 とは限らない。参照したリファレンスの書き方が悪かったのかなぁ。 ていう…

辞書に登録されている語をテキスト中から検索する

ref:裏表(Phinloda のもう裏だか表だか分からないページ) | メモ: パターンマッチのちょっとした問題 ref:裏表(Phinloda のもう裏だか表だか分からないページ) | メモ: パターンマッチのちょっとした問題 (2) あー、Computer Science 的にそういうのは AC 法…

C++ における NULL

C++

いや、もうなんていうか自分的には C++ における NULL の話をしているつもりなのに C での話を持ってこられても困るというか。 調べた人もいるので、そっちをみれば終了なんだけど、GCC のメーリングリストでもちょっと議論になっていたのが見やすかったので…

typesafe な NULL

C++

#include <iostream> class NullObject { public: static const NullObject instance; public: template<typename T> inline operator T*() const { return 0; } private: NullObject() {} NullObject(const NullObject& other); NullObject& operator=(const NullObject& other); </typename></iostream>…

NULL と 0

C++

なぜだか最近 C++ ネタが多いな。研究では Java か Python か Shell Script がほとんどなんだけど。 ここでは、NULLは((void*)0)であって、0ではないのだから、場合によっては動作が違うよ……ということが書かれています。 でも面白いことに、C++ではNULLと0…

オーバーロードされた関数のオーバーライド

C++

多重定義されているメンバ関数をオーバーライドするときは、多重定義されているすべてのメンバ関数をオーバーライドしなければならない。 ってこと? ちょっとにわかには信じられない。これが事実だとしたら、メンバ関数の多重定義はやるなっていってるのと…

template で 後置 cast

C++

ref:404 Blog Not Found:C/C++ - typecastをmethodに OK。cast を後置したいのはよくわかった。しかし、C++ の Unum で union を使う必要があるのか? 使うとしても ananymous union でもいいような。あと、malloc がまずいと思うなら std::allocator を使う…

pointer to member operator

C++

ref:Operators in C and C++ - Wikipedia, the free encyclopedia 英語版Wikipedia の C++ の演算子の項目を見てたら見慣れないものが。 Operator Name Syntax Is overloadable? In C? Dereferencing Member Operator a.*b No No Dereferencing Array Operat…

どうでもいいC++コード断片

C++

簡易catコマンド streambuf_iterator と std::copy を組み合わせる。 #include <iostream> #include <fstream> #include <iterator> #include <algorithm> #include <cerrno> #include <cstring> int main(int argc, char** argv) { using namespace std; if (argc == 1) { copy(istreambuf_iterator<char>(cin), istreambuf_</char></cstring></cerrno></algorithm></iterator></fstream></iostream>…

boost::lambda で suffix sort

C++

先日 C++ の Duck Typing のサンプルコードを書いたら、「何この Syntax」みたいなことを言われたので、さらにきつそうなのハードディスクからサルベージしてさらしてみる。要 Boost。 STL の std::sort と boost::lambda をフル活用して suffix sort をして…

C++でDuck Typing

C++

>Duck Typing 調べてみたけどさっぱりだー クラスAとBがあって、それぞれに継承関係がなかったとしても、同じメソッドを持っていれば同じように扱うことができる…ってことかなぁ…むずかしぃ それで間違ってないです。難しいっていうのは理屈では理解できるけ…

仮想関数の意義

仮想関数の存在意義が良く分からない。ので使わないことにしよう。 ええと、Java を使える人がそういうこと言いますか。Javaのメソッドコールは全て動的束縛(仮想関数)だと思ったのだけども。まぁ、インスタンスの宣言型と実際の型を常に一致させている人は…

行単位で読み込む input_iterator

行単位で読み込むinput_iteratorが見つからなかったので自作してみた。 なんかBoostのライブラリを組み合わせればできるような気もするけど。 #include <string> #incldue <iostream> #include <iterator> #include <boost/iterator/iterator_facade.hpp> template<typename CharType, typename Traits = std::char_traits<CharType> > class basic_istream_line_iterator : public b…</typename></boost/iterator/iterator_facade.hpp></iterator></iostream></string>

const に対する numeric_limits

C++

#include <iostream> #include <limits> int main() { std::cout << std::numeric_limits<const int>::max() << std::endl; return 0; }上のソースをコンパイルして実行したら0が出力された。 numeric_limits に const な型を使ってはいけないらしい。gcc4、VS2005両方で同じ挙動だったの</const></limits></iostream>…

mmapではまる

C++

offset は getpagesize(2) の返すページサイズの整数倍でなければならない。 mmap に offset を指定するとうまく動かなくて、原因がわからず Linux のカーネルソースを読んで offset & ~PAGE_MASK が 0にならないといけないことがわかった。 でその後に、こ…