2008-05-01から1ヶ月間の記事一覧
さすがに「これはひどい」だったので、例外を使うように書き直す。 テンプレート、便利だなー。 #include <string> #include <iostream> #include <sstream> #include <winsock2.h> namespace wsa { int cleanup() { return WSACleanup(); } void startup(WORD version) { WSADATA wsa_data; int n; </winsock2.h></sstream></iostream></string>…
http://www5d.biglobe.ne.jp/~y0ka/2005-08-17-3.html ふむふむ。
「p」を参照にもポインタにもできない…なぜー? #include <iostream> #include <string> #include <map> #include <algorithm> using namespace std; void handle(pair<string, string> p) { cout << p.first << ":" << p.second << endl; } int main() { map<string, string> m; m.insert(make_pair("foo", "FOO")); m.insert(m</string,></string,></algorithm></map></string></iostream>…
独習C++作者: ハーバート・シルト,神林靖,トップスタジオ出版社/メーカー: 翔泳社発売日: 2002/11メディア: 単行本(ソフトカバー)購入: 4人 クリック: 112回この商品を含むブログ (55件) を見る読了。6年前の本だったけど、全然問題なかった。 エントリの…
例外使わないと、どうしてもCっぽくなるなー。 #include <string> #include <iostream> #include <winsock2.h> namespace wsa { int cleanup() { return WSACleanup(); } void startup(WORD version) { using namespace std; WSADATA wsa_data; int n; if ((n = WSAStartup(version, &wsa_d</winsock2.h></iostream></string>…
#include <iostream> #include <vector> using namespace std; class Foo { public: Foo() { cout << "new:" << this << endl; } Foo(const Foo &foo) { cout << "copy:" << this << endl; } Foo &operator=(Foo foo) { cout << "=:" << this << endl; return *this; } ~Foo() </vector></iostream>…
#include <iostream> #include <vector> using namespace std; class Foo { public: Foo() { cout << "new:" << this << endl; } Foo(const Foo &foo) { cout << "copy:" << this << endl; } Foo &operator=(Foo foo) { cout << "=:" << this << endl; return *this; } ~Foo() </vector></iostream>…
#include <iostream> #include <vector> using namespace std; void puts_array(int *p, int len) { for (int i = 0; i < len; i++) { cout << p[i] << endl; } } int main() { vector<int> v; for (int i = 0; i < 10; i++) { v.push_back(i); } puts_array(&v[0], v.size()); retu</int></vector></iostream>…
とりあえず使ってみる。 「return 0;」が気になるな… #include <iostream> using namespace std; template <class T> class Stack { private: T *stack; int size; int tos; public: Stack(int size); ~Stack(); bool push(T x); T pop(); bool empty(); }; template <class T> Stack<T>::St</t></class></class></iostream>…
容量の少ないX40にいくつもブラウザを入れたくないので、IE7を使うようにしているが、なんとなく気に入ってしまった。 特に以下のインタフェースが気に入っている。 クイックタブ タブの左隅にあるボタンを押すと… タブ画面をタイル状に並べてくれる。 フィ…
VCだとサポートされず。(コンパイルエラーにはならず、無視される) #include <iostream> using namespace std; void func() throw(int) { throw 0L; } int main() { try { func(); } catch(...) { } } $ g++ -g foo.cpp -o foo && ./foo Hangup</iostream>
#include <iostream> using namespace std; void func() throw(int) { throw 0L; } void uhandler() { cout << "uhandler()" << endl; } void thandler() { cout << "thandler()" << endl; exit(1); } int main() { set_unexpected(uhandler); set_terminate(thandler)</iostream>…
「...」で受け取っても上に投げれる、と。 #include <iostream> using namespace std; void foo() { throw "error"; } void bar() { try { foo(); } catch (...) { cout << "error at foo()" << endl; throw; } } int main() { try { bar(); } catch (char *e) { cout <</iostream>…
VCでもビルドできた。 bad_allocはどっかでハンドルすべきなのかなぁ… #include <iostream> using namespace std; int main() { int *i = new(nothrow) int; }</iostream>
#include <iostream> using namespace std; template <class T> class Foo { T x; public: Foo(T x); void show(); template <class TT> void func(T x, TT y); }; template <class T> Foo<T>::Foo(T x) : x(x) {} template <class T> void Foo<T>::show() { cout << x << endl; } template <class T> template <class TT> …</class></class></t></class></t></class></class></class></iostream>
#include <iostream> #include <typeinfo> using namespace std; template <class T> class Foo { public: void show() { cout << typeid(Foo<T>).name() << endl; } }; int main() { Foo<int> foo; Foo<Foo<int>> bar; cout << typeid(foo).name() << endl; cout << typeid(bar).name() << endl; return 0;</foo<int></int></t></class></typeinfo></iostream>…
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200404/04040017.txt うーん、わかるようなわからないような。 確かに、virtualなメンバ関数を持っていないような基本クラスを派生クラスにキャストする状況は少ない気がする。 どっかに、仕様な…
http://msdn.microsoft.com/ja-jp/library/cc440191(VS.71).aspx 酔った頭だとぜんぜん理解できない…
Javaの黒魔術の最たるものってなんだろなーと考えたことがあって、BCELみたいなバイトコードを直接いじっちゃうのがそれではないかと思ったりした。 もちろんRubyだって動的にクラスをいじることはできるけど、動的な型付けの言語のそれとは少し性質が違うよ…
virtualをつけないとオーバライドされない、と。 #include <iostream> using namespace std; class Foo { public: void func() { cout << "Foo::func()" << endl; } virtual void vfunc() { cout << "Foo::vfunc()" << endl; } }; class Bar : public Foo { public: vo</iostream>…
#include <iostream> using namespace std; class Foo { public: void func() { cout << "Foo::func()" << endl; } virtual void vfunc() { cout << "Foo::vfunc()" << endl; } }; class Bar : public Foo { public: void func() { cout << "Bar::func()" << endl; } v</iostream>…
インスタンス化はできない、と。 #include <iostream> using namespace std; class Foo { public: void func() { cout << "Foo::func()" << endl; } virtual void vfunc() = 0; }; class Bar : public Foo { public: void func() { cout << "Bar::func()" << endl; } v</iostream>…
コンパイルできず。当たり前か。 でも、変わったシンタックスだなー。 #include <iostream> using namespace std; class Foo { public: void func() { cout << "Foo::func()" << endl; } virtual void vfunc() = 1; }; int main() { return 0; } $ g++ -g foo.cpp -o f</iostream>…
#include <iostream> using namespace std; class Foo { public: virtual void vfunc() = 0; }; class Bar : public Foo { public: virtual void vfunc() = 0; }; class Zoo : public Bar { public: void vfunc() { cout << "Zoo::vfunc()" << endl; } }; int main() {</iostream>…
http://archive.mag2.com/0000236703/index.html これって定石なのかなぁ? #include <iostream> using namespace std; class Foo { public: virtual ~Foo() = 0; }; Foo::~Foo() {} class Bar : public Foo {}; int main() { Bar bar; return 0; }</iostream>
できた。 #include <iostream> using namespace std; class Foo { public: virtual void func() = 0; }; class Bar : public Foo { public: void func() { cout << "Bar::func()" << endl; } }; int main() { Bar bar; Foo &foo = bar; foo.func(); return 0; } Bar::f</iostream>…
使ってみる。 #include <iostream> using namespace std; class Bike { public: virtual void shift_gear() = 0; }; class Suzuki : public Bike { public: void shift_gear() { cout << "スコンスコン" << endl; } }; class Kawasaki : public Bike { public: void sh</iostream>…
テンプレートの展開(?)はコンパイル時、「<>」で明示的に指定できる、と。 #include <iostream> #include <string> using namespace std; template <class X> void func(X &x) { cout << x << endl; } int main() { int i = 100; string s = "foo"; func(i); func<int>(i); func(s); func<string>(s);</string></int></class></string></iostream>…
http://www.fides.dti.ne.jp/~oka-t/cpplab-template-4.html staticはCの問題じゃないかなぁ。
テンプレートの前に関数が定義されていても、隠蔽される、と。 少なくともVCではそうなった。 #include <iostream> #include <string> using namespace std; void func(int &x) { cout << "overload" << endl; } template <class X> void func(X &x) { cout << x << endl; } int main() </class></string></iostream>…