しーぷるぷる

ネタ帳。 boost::function_traits の OpenGL エラーハンドリングへの応用 boost::operators がクラスサイズに及ぼす影響の回避 FLTK の table 実装の調査 (Table, Fl_Table, FLVW) VolSuite の調査

OpenGL 関数の話はすこしお休みして、一時変数の話をしようと思います。哥貴分とそんな話をしたので、ぼくが忘れてしまわないうちに。#include <iostream>class A { int x_; public: A() : x_(123) { std::cout << "A::(construct)" << std::endl; } ~A() { std::cout <</iostream>…

OpenGL 関数を呼び出すたびにエラーチェックを行いたい。例として、glEnable(GL_LIGHTING); // ... if (glIsEnabled(GL_LIGHTING)) { // ... } glEnable(GL_POLYGON_OFFSET); glPolygonOffset(1, 1);というコードを考える。マクロ OGL を導入しよう。OGL(fun…

OpenGL のエラーハンドリングは、ときに非常に重要である。シェーダ関連の拡張を使用する際には、死活的に重要である。SIGGRAPH 2001 の Course 03 "Performance OpenGL: Platform Independent Techniques" では、次のマクロが紹介されている。#define CHECK…

Scoped は boost::bind と組み合わせて使うと、いっそうぷるぷるするだろう。例として、MSDN の『BSTR 用のメモリの割り当てと解放』の二個めの例を改変する。#include <boost/bind.hpp> #include "Scoped.hpp"// BSTR を取得するための関数の宣言 HRESULT IWebBrowser2::get</boost/bind.hpp>…

C++ に finally ブロックは存在しない。まあ、どうってことはない。#include <memory>namespace Scoped_ { class Base { public: virtual ~Base() {} }; template <typename Function> class Impl : public Base { Function func_; public: explicit Impl(Function func) : func_(func) </typename></memory>…

boost::check_delete(r) の話もそろそろ終わりとしたい。まずは、std::auto_ptr と boost::scoped_ptr のデストラクタを見てみよう(ただし簡略化した形で。実際の実装に関してはそれぞれのヘッダファイルを参照のこと)。template <typename T> class auto_ptr { T* ptr</typename>…

std::auto_ptr を採用して、class A のデストラクタを省略した場合、なにが起こるのか。そう、空からかわいい女のコが落ちてくるのだ。まずは、(間違った)ヘッダファイル。#ifndef A_HEADER #define A_HEADER#include <memory>class A { class Impl; std::auto_ptr</memory>…

boost::checked_delete(r) の存在する理由について説明した。じゃあ、現実的にそれが必要とされるのはどんな場面なのか。Pimpl イディオム(google:Pimpl idiom)というものがある。インクルード地獄から脱出するためのこのイディオムの、もっとも単純な例を…

不完全な型のポインタを delete することは可能である。ただし、なにが起こるか判らない。空からかわいい女のコが降ってくるかもしれない。class A;A* create_instance();int main(int, char* []) { A* a = create_instance(); delete a; return 0; }#includ…

例を挙げよう。class A;A* create_instance();int main(int, char* []) { A* a = create_instance(); delete a; return 0; }このファイルをコンパイルするとなにが起きるだろうか。コンパイラによっては、コンパイルに失敗するだろうし、警告が発せられるか…

boost::checked_detele(r) に関して、質問をいただいたので、Pimpl イディオムを絡めた解説を行おうと思う。ただし、長くなるので、日を分けてお送りしたい。boost のドキュメントに曰く、 The C++ Standard allows, in 5.3.5/5, pointers to incomplete cla…

STL (Standard Template Library) に限った話をしよう。おおまかに三段階の、STL への関わり方があるように見える。 無理解 std::vector を配列の代替に使う。 表層 STL の「使い方」と、Big O notation での効率の理解。std::for_each は使わない。 変態 実…

俺は断乎として、しーぷるぷるを遂行する。職場で孤立したとしても(孤立してるんだが)、これだけは譲れない。だけど、これくらいのコードは解してくれたっていいじゃない?#include <deque> #include <iostream> #include <boost/bind.hpp> #include <boost/checked_delete.hpp>class Base { public: virtual ~Base() {</boost/checked_delete.hpp></boost/bind.hpp></iostream></deque>…