C++

C++ で Ruby の inject みたいなやつを作ってみる

C++

仕事で C++ を使うことになったので、リハビリを兼て Ruby の inject みたいな (lisp の apply みたいな) 関数を書いてみた。 #include <iostream> #include <vector> #include <functional> using namespace std; #define ARRSIZ(a) (sizeof(a)/sizeof((a)[0])) #define ARREND(a) ((a)+AR</functional></vector></iostream>…

STL の iterator って静的型のダックタイピングなの?

C++

iterator ってポインタのように使えるだけかと思ったら、ポインタを iterator のように使うこともできるのか。STL の sort とか find って、何であんな まどろっこしい引数なのかと思ったら、そういうことですか。 #include <iostream> #include <vector> #include <set> #include <algorithm> </algorithm></set></vector></iostream>…

オブジェクトの順序

C++

オレオレクラスのオブジェクトを STL のコンテナに詰めたい。vector になら詰められるけど、set に詰めようと思ったら、オブジェクトの順序を決めないといけない。operator class Foo { ... public: bool operator<(const Foo& rhs) const { return id < rhs…

オレオレクラスを ostream に出力する

C++

C++ プログラミング入門 によると、print() というメンバ関数を作って、operator class Foo { ... public: void print(ostream* out) const { *out << value; } ... }; ostream& operator<<(ostream& out, const Foo& foo); なんで print なのか? なんで ost…

クラスの雛形

C++

class Foo { // constructor, destructor and ... public: Foo(int val = 0): value(val) {} ~Foo() {} Foo(const Foo& src); Foo& operator=(const Foo& src); // accessor int getValue() const { return value; } void setValue(int val) { value = val; …

VisualStudio のデバッグビルドではまった

あるライブラリを使おうとヘッダファイルを include したら、意味不明なエラーが出た。 (×) 1 error C2059: 構文エラー : '文字列' (×) 2 error C2091: 関数は関数を返せません。 (×) 3 error C2802: 静的なメンバ 'operator new' に仮引数リストがありませ…

new できないクラスを作りたい

C++

new できなかったら、どうやって使うのかって? CannotNew o; // 使える CannotNew* p = new CannotNew; // 使えない (ようにしたい) CannotNew* p = new CannotNew[3]; // 使えない (ようにしたい) スタック上に作るのはいいけど、ヒープに作るのはやめて欲…

const 厨

C++

職場で、変に const された C++ のコードに出会した。 int parse_arg(const int argc, char** const argv) { for (int i=1; i < argc; ++i) { // ... 別に const 付けなくても動くんだから間違いじゃないけど。 たぶん、やりたいことは、こうでしょ?int pars…