C++

const int よりも int const と書こう、という提案

c++

……という提案を、試しにちょっとしてみます。 ポインタ型とconst C++er の皆さん、次のコードを正しく説明できるでしょうか? int hoge = 42; const int * p1 = &hoge; int const * p2 = &hoge; int * const p3 = &hoge; もちろん答えはこうなります: int h…

openFrameworksを使ったフレーム編集

概要 動画からフレームを抜き出してOpenCVで加工する環境をopenFrameworksで準備してみました。 日本語パス周りで少しハマったのでメモ代わりにブログに残しておきます。 動作環境 Windwos7 64bit openFrameworks0.8.4 visual studio 2012 professional open…

C++からC++らしくJNIを呼んでみる

JNI(Java Native Interface)はJavaとCの連携技術です。Javaアプリケーションの一部ロジックをCで書いたり、さらにその中からJavaのメソッドを呼び出したりする事で、アプリケーションの実行環境が制限される代わりに高速化、あるいは非Javaプラットフォー…

☆C++11テクニック☆ 配列を配列で初期化する方法+α

C++

メンバー変数の初期化 例えば、こんなコードがあったとします。 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>…

boost::multi_arrayのランダムアクセスに注意

※下記の内容はVisual Studio2010でコンパイルしました。gcc 4.8.2でコンパイルすると結果が異なります。詳しくはコメント欄をご確認下さい。 便利なboost::multi_array 多次元配列を実装するときに便利なboost::multi_arrayですが、ランダムアクセスが遅いの…

これでほぼ完璧! C++シングルトン基底クラスの決定版!

C++

シングルトンパターンは、デザインパターンがさっぱりわからないプログラマーでも聞いた事があるかもしれないくらい有名であるにもかかわらず、真面目に実装しようと思うと様々な問題が発生してしまいます。 具体的には、 static変数の初期化順序が未定義で…

C++プログラマーよ!std::make_sharedを安易に使うべからず!

C++

boost::shared_ptrやstd::shared_ptrの便利さは、boostやC++11に慣れた方であれば当然ご存知かと思います(もちろん、循環参照の危険性や、それを回避するためのweak_ptrの使い方まで含めて)。 しかし世の中というものはさらに便利にできていて、この便利な…

iPhoneでお手軽画像変形

概要 斜めの方向から撮影してしまったけど、後から正面から撮った画像が欲しくなった事はありませんか? 例えば、以下の写真ような場合です。 実はこれを正面から撮ったように画像を変形する事が出来ます。 そう。ホモグラフィならね。こんな感じに出来ます…

C++テクニック!可変長引数テンプレートの値をインデックスで取得

c++

早速ですが問題です。次のような場合、一体どうすればよいでしょうか? template <class T...> class Hoge { private : // TODO: T...のうち、N番目の引数の型を取得したい! } ; 何のためにそんなのが欲しくなるのかはいまいち謎ですが、まあ、やるとしたらこんな感じに</class>…

全宇宙の素粒子の数を超えて…C++で巨大数に挑戦!(おまけ)

c++

こんにちは、株式会社CFlatです。 前回『巨大数の計算』では、次のように書きました。 本当は不要な部分は元の値を参照した方が(特にBigIntを使う場合に)都合がよいのでしょうが、今回は割愛します。 が、折角ですのでもうちょっと頑張ってみます。人類の…

全宇宙の素粒子の数を超えて…C++で巨大数に挑戦!

c++

こんにちは、株式会社CFlatです。 早速ですが、C++で、巨大数の計算を行なってみたいと思います。 といっても今回は、多倍長整数、いわゆるBigIntとかそういう話ではなく、巨大数を表現するための表記……具体的には「コーンウェイのチェーン表記」の話です。 …

継承できないクラス

C++

こんにちは、株式会社CFlatです。C++11ではfinalキーワードが導入され、継承できないクラスを作ることが容易になりました。 例えば次のようなHogeクラスを継承しようとすると、エラーが発生します。 class Hoge final {}; クラス自体は継承可能だけれども、…

OpenGLをC++11でラップしてみんとてするなり 番外編:Qt5+OpenGLの落とし穴

先日、ひょんな事からglutで作ったライブラリをQt5に移植してみることになりました。 作業自体は大変なことではなく、glutのラッパーとして作った各種のクラス群を、QGLWidgetのラッパーとして作り変えてやるだけです。当然、理想的な設計がされたライブラリ…

XCodeでハマったこと

こんにちは、株式会社CFlatです。XCodeにて、C/C++ Library(Type=Dynamic)と、Command Line Tool(Type=C++)の、2つのプロジェクトを用意します。そしてそれぞれに次のようなコードを書いて、デバッグビルドします。 A.h (project1) #include <cstdio> #include <string> clas</string></cstdio>…

C++とfinally(おまけ)

こんにちは、株式会社CFlatです。今回のタイトルはC++ですが、試しにC++以外の幾つかの言語におけるデストラクタやfinallyの相当機能について、少々見ていきたいと思います。 Java finallyとは別に、クラスにfinalize()メソッドを実装することができます。 f…

C++とfinally

C++

こんにちは、株式会社CFlatです。あれほど何でも取り込むC++がC++11になってもいまだに採用しない言語仕様で、他の言語にはよく採用されているもの。 幾つかありますが、代表的なものがGC(ガベージコレクション)とfinallyブロックでしょう。 ただ今回は、G…

doubleのRadixSort

バケットソートの欠点を補える基数ソート(RadixSort) バケットソートは計算量O(N)の素晴らしい必殺技ですが、 如何せんバケツのサイズに限度があり、用途が限定されます。 この問題を、痛みを伴いながら一部解決できる方法として、基数ソートが上げられます…

OpenGLをC++11でラップしてみんとてするなり 第7回

今回のテーマはテクスチャ。今までと比べると単に作って破棄する機能が増えただけに見えて、実はかなり厄介です。 というのも、インスタンスの作成から破棄までの間でコンテキストが切り替わらない今までの機能とは異なり、コンテキストが切り替わってもデー…

OpenGLをC++11でラップしてみんとてするなり 第6.5回

そういえば、gl::Matrixクラスの各種操作がMatrixにしか対応していなかったので、Matrixにも対応するようにしましょう。 まずは、行列操作関数をまとめた次のようなクラスを作り、必要な型(floatとdouble)に対して特殊化をします。それ以外の型に対しては…

OpenGLをC++11でラップしてみんとてするなり 第6回

それでは今回は、行列計算のラッパークラスを作りたいと思います。 ●4x4行列 OpenGLでの行列のメモリモデルは、次のようになっています。次元数を任意に拡張して、さらに要素型も任意にできるよう、次のようなクラスにしてみます。 今回は長くなるので省きま…

右辺値参照とムーブセマンティクス

資料だけならWeb上に多かれど、いまいちピンとこないのがこの2つの機能ではないかと思います。大体この2つはセットにして語られるので、どこからどこまでが右辺値参照の機能でどこからどこまでがムーブセマンティクスの機能なのかを混同してしまう、というこ…

OpenGLをC++11でラップしてみんとてするなり 第5回

早速、前回(第4回)で作ったDepthTestのインスタンスを、gl::Contextのメソッド中で作成するようにしてみます。 gl/Context.h namespace gl { class Context : noncopyable<Context> { // 一部省略 public : DepthTest depth_test(bool enabled) { return DepthTest(</context>…

OpenGLをC++11でラップしてみんとてするなり 第4回

●glEnable()/glDisable()/glIsEnabled()の使い方 まず最初に、サンプルとなるコードを提示します。 main.cpp #include "glall.h" #include "glut/Window.h" /** * glut::Windowを継承してウィンドウを作る */ class Window : public glut::Window { public :…

C++ 可変長引数テンプレートのお話

前回のソースコードの中で1点だけ、C++11らしい機能の紹介を。 C++11の機能という点ではgl/InputConstants.h内でenum classを使ってはいますが、基本的なことしかしていませんので省略します。●可変長引数テンプレート glut/Window.hに1ヵ所だけ、テンプレー…

OpenGLをC++11でラップしてみんとてするなり 第3回

●GLコンテキストクラスの実装 前回(第2回)で述べたように、OpenGL関連の処理は、コンテキストクラス内に用意することにしました。 このクラスの実装は、次のようになっています。 gl/Context.h namespace gl { class Context { protected : Context() {} v…

OpenGLをC++11でラップしてみんとてするなり 第2回

OpenGLの機能を全てラップしたライブラリをブログ上で開発する気など毛頭ありませんので、OpenGLとC++11の紹介となるようなサンプルを幾つか作っていこうと思います。 今のところ、以下の4つの機能を実装していこうかと思いますが、他にも面白そうなネタが見…

OpenGLの仕組み

現代的なオブジェクト指向プログラミングから入ったプログラマーにとっては、OpenGLは時に、摩訶不思議な振る舞いをするように感じることがあります。 それもそのはず、教科書的なOOPではグローバル変数などは唾棄すべき禁忌の1つとされていますので、そもそ…

OpenGLをC++11でラップしてみんとてするなり 第1回

株式会社CFlatの技術ブログをスタートします。 メンバーが技術的に面白いと感じる題材、ハマったことなどをツラツラとアップしていきます。 だいたい週一回程度のペースのアップを考えております。 最初から連載物になりますが、それではどうぞ。 『諸君、私…