C++
……という提案を、試しにちょっとしてみます。 ポインタ型とconst C++er の皆さん、次のコードを正しく説明できるでしょうか? int hoge = 42; const int * p1 = &hoge; int const * p2 = &hoge; int * const p3 = &hoge; もちろん答えはこうなります: int h…
概要 動画からフレームを抜き出してOpenCVで加工する環境をopenFrameworksで準備してみました。 日本語パス周りで少しハマったのでメモ代わりにブログに残しておきます。 動作環境 Windwos7 64bit openFrameworks0.8.4 visual studio 2012 professional open…
JNI(Java Native Interface)はJavaとCの連携技術です。Javaアプリケーションの一部ロジックをCで書いたり、さらにその中からJavaのメソッドを呼び出したりする事で、アプリケーションの実行環境が制限される代わりに高速化、あるいは非Javaプラットフォー…
メンバー変数の初期化 例えば、こんなコードがあったとします。 template <class T> struct Hoge { Hoge(const T &v) : value(v) {} T value; }; template <class T> Hoge<T> make_hoge(const T &v) { return Hoge<T>(v); } #include <iostream> #include <cxxabi.h> #include <cstdlib> #include <memory> template <class T> std::</class></memory></cstdlib></cxxabi.h></iostream></t></t></class></class>…
※下記の内容はVisual Studio2010でコンパイルしました。gcc 4.8.2でコンパイルすると結果が異なります。詳しくはコメント欄をご確認下さい。 便利なboost::multi_array 多次元配列を実装するときに便利なboost::multi_arrayですが、ランダムアクセスが遅いの…
シングルトンパターンは、デザインパターンがさっぱりわからないプログラマーでも聞いた事があるかもしれないくらい有名であるにもかかわらず、真面目に実装しようと思うと様々な問題が発生してしまいます。 具体的には、 static変数の初期化順序が未定義で…
boost::shared_ptrやstd::shared_ptrの便利さは、boostやC++11に慣れた方であれば当然ご存知かと思います(もちろん、循環参照の危険性や、それを回避するためのweak_ptrの使い方まで含めて)。 しかし世の中というものはさらに便利にできていて、この便利な…
概要 斜めの方向から撮影してしまったけど、後から正面から撮った画像が欲しくなった事はありませんか? 例えば、以下の写真ような場合です。 実はこれを正面から撮ったように画像を変形する事が出来ます。 そう。ホモグラフィならね。こんな感じに出来ます…
早速ですが問題です。次のような場合、一体どうすればよいでしょうか? template <class T...> class Hoge { private : // TODO: T...のうち、N番目の引数の型を取得したい! } ; 何のためにそんなのが欲しくなるのかはいまいち謎ですが、まあ、やるとしたらこんな感じに</class>…
こんにちは、株式会社CFlatです。 前回『巨大数の計算』では、次のように書きました。 本当は不要な部分は元の値を参照した方が(特にBigIntを使う場合に)都合がよいのでしょうが、今回は割愛します。 が、折角ですのでもうちょっと頑張ってみます。人類の…
こんにちは、株式会社CFlatです。 早速ですが、C++で、巨大数の計算を行なってみたいと思います。 といっても今回は、多倍長整数、いわゆるBigIntとかそういう話ではなく、巨大数を表現するための表記……具体的には「コーンウェイのチェーン表記」の話です。 …
こんにちは、株式会社CFlatです。C++11ではfinalキーワードが導入され、継承できないクラスを作ることが容易になりました。 例えば次のようなHogeクラスを継承しようとすると、エラーが発生します。 class Hoge final {}; クラス自体は継承可能だけれども、…
先日、ひょんな事からglutで作ったライブラリをQt5に移植してみることになりました。 作業自体は大変なことではなく、glutのラッパーとして作った各種のクラス群を、QGLWidgetのラッパーとして作り変えてやるだけです。当然、理想的な設計がされたライブラリ…
こんにちは、株式会社CFlatです。XCodeにて、C/C++ Library(Type=Dynamic)と、Command Line Tool(Type=C++)の、2つのプロジェクトを用意します。そしてそれぞれに次のようなコードを書いて、デバッグビルドします。 A.h (project1) #include <cstdio> #include <string> clas</string></cstdio>…
こんにちは、株式会社CFlatです。今回のタイトルはC++ですが、試しにC++以外の幾つかの言語におけるデストラクタやfinallyの相当機能について、少々見ていきたいと思います。 Java finallyとは別に、クラスにfinalize()メソッドを実装することができます。 f…
こんにちは、株式会社CFlatです。あれほど何でも取り込むC++がC++11になってもいまだに採用しない言語仕様で、他の言語にはよく採用されているもの。 幾つかありますが、代表的なものがGC(ガベージコレクション)とfinallyブロックでしょう。 ただ今回は、G…
バケットソートの欠点を補える基数ソート(RadixSort) バケットソートは計算量O(N)の素晴らしい必殺技ですが、 如何せんバケツのサイズに限度があり、用途が限定されます。 この問題を、痛みを伴いながら一部解決できる方法として、基数ソートが上げられます…
今回のテーマはテクスチャ。今までと比べると単に作って破棄する機能が増えただけに見えて、実はかなり厄介です。 というのも、インスタンスの作成から破棄までの間でコンテキストが切り替わらない今までの機能とは異なり、コンテキストが切り替わってもデー…
そういえば、gl::Matrixクラスの各種操作がMatrixにしか対応していなかったので、Matrixにも対応するようにしましょう。 まずは、行列操作関数をまとめた次のようなクラスを作り、必要な型(floatとdouble)に対して特殊化をします。それ以外の型に対しては…
それでは今回は、行列計算のラッパークラスを作りたいと思います。 ●4x4行列 OpenGLでの行列のメモリモデルは、次のようになっています。次元数を任意に拡張して、さらに要素型も任意にできるよう、次のようなクラスにしてみます。 今回は長くなるので省きま…
資料だけならWeb上に多かれど、いまいちピンとこないのがこの2つの機能ではないかと思います。大体この2つはセットにして語られるので、どこからどこまでが右辺値参照の機能でどこからどこまでがムーブセマンティクスの機能なのかを混同してしまう、というこ…
早速、前回(第4回)で作ったDepthTestのインスタンスを、gl::Contextのメソッド中で作成するようにしてみます。 gl/Context.h namespace gl { class Context : noncopyable<Context> { // 一部省略 public : DepthTest depth_test(bool enabled) { return DepthTest(</context>…
●glEnable()/glDisable()/glIsEnabled()の使い方 まず最初に、サンプルとなるコードを提示します。 main.cpp #include "glall.h" #include "glut/Window.h" /** * glut::Windowを継承してウィンドウを作る */ class Window : public glut::Window { public :…
前回のソースコードの中で1点だけ、C++11らしい機能の紹介を。 C++11の機能という点ではgl/InputConstants.h内でenum classを使ってはいますが、基本的なことしかしていませんので省略します。●可変長引数テンプレート glut/Window.hに1ヵ所だけ、テンプレー…
●GLコンテキストクラスの実装 前回(第2回)で述べたように、OpenGL関連の処理は、コンテキストクラス内に用意することにしました。 このクラスの実装は、次のようになっています。 gl/Context.h namespace gl { class Context { protected : Context() {} v…
OpenGLの機能を全てラップしたライブラリをブログ上で開発する気など毛頭ありませんので、OpenGLとC++11の紹介となるようなサンプルを幾つか作っていこうと思います。 今のところ、以下の4つの機能を実装していこうかと思いますが、他にも面白そうなネタが見…
現代的なオブジェクト指向プログラミングから入ったプログラマーにとっては、OpenGLは時に、摩訶不思議な振る舞いをするように感じることがあります。 それもそのはず、教科書的なOOPではグローバル変数などは唾棄すべき禁忌の1つとされていますので、そもそ…
株式会社CFlatの技術ブログをスタートします。 メンバーが技術的に面白いと感じる題材、ハマったことなどをツラツラとアップしていきます。 だいたい週一回程度のペースのアップを考えております。 最初から連載物になりますが、それではどうぞ。 『諸君、私…