2010-11-01から1ヶ月間の記事一覧

BOOST_ASSERT(expr)

#include <boost/assert.hpp> int main(){ BOOST_ASSERT(false); int* ptr = NULL; BOOST_ASSERT(ptr != NULL); return 0; } 内部で assert を呼んでいるだけなので、使い方は通常の assert と同じです。 拡張機能として、BOOST_ASSERT の処理をフックすることが出来ます。 #in</boost/assert.hpp>…

boost 1.45.0 のコンパイル

公式から落としてきた bjam で boost 1.45.0 をコンパイルしようとすると失敗するみたいです。 bootstrap.bat から生成した bjam だと問題なくコンパイルが出来ます。 よく見てみると bjam のバージョンが食い違ってるみたいですね。 公式からダウンロード …

boost 1.45.0

boost 1.45.0 がリリースされたみたいです。 リリースノート:http://www.boost.org/users/news/version_1_45_0 日本語版 :https://sites.google.com/site/boostjp/document/version/1_45_0 個人的に気になった部分はあまりないかな?

boost::parameter を class template で使う

#include <map> #include <string> #include <boost/parameter.hpp> #include <boost/static_assert.hpp> #include <boost/type_traits/is_same.hpp> BOOST_PARAMETER_TEMPLATE_KEYWORD(key) BOOST_PARAMETER_TEMPLATE_KEYWORD(value) BOOST_PARAMETER_TEMPLATE_KEYWORD(compare) BOOST_PARAMETER_TEMPLATE_KEYWORD(allocat…</boost/type_traits/is_same.hpp></boost/static_assert.hpp></boost/parameter.hpp></string></map>

boost::parameter

#include <boost/parameter.hpp> #include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_comparison.hpp> #include <boost/assert.hpp> typedef boost::tuple<int, int> pos_t; BOOST_PARAMETER_NAME(x) BOOST_PARAMETER_NAME(y) template<typename Args> pos_t make_pos(const Args& args){ return pos_t(args[_x…</typename></int,></boost/assert.hpp></boost/tuple/tuple_comparison.hpp></boost/tuple/tuple.hpp></boost/parameter.hpp>

C++0x の右辺値参照がこんなに難しいわけがない。

C++0xのアレです。 これに関してはさんざん解説がされているとは思いますが、自分がイマイチ理解していなかったのでまとめてみました。 概念や細かい仕様なんかは書いてないのでありからず…。 あとテスト用のコンパイラは、gcc-4.5.0 です。 ☆参照渡し C++ …

ドキュメントの作成

テキストファイル 編集や管理が簡単だがダサい word 使い勝手が悪い html エディタを使って、html を書いたことがないのでなんともいえない Github や Assemble に付いている wiki を使用する 編集や管理は楽そう ただし、ローカルで保存できないので、ライ…

boost::test

#include <boost/test/minimal.hpp> bool is_leap_year(int year){ return year%4 == 0 && year%100 != 0 || year%400 == 0; } template<typename T, typename U> struct is_same{ static const bool value = false; }; template<typename T> struct is_same<T, T>{ static const bool value = true; }; int test_main(int …</t,></typename></typename></boost/test/minimal.hpp>

ライブラリ構成のメモ書き

以前作成していた vec ライブラリをつくり直す改良するのにしたがって、ライブラリの構成も大幅に変えようと思うので、そのメモ書き。 大まかな作りは、boost や pstade なんか参考にする予定。 覚え書き バージョン管理 使用するのは自分ひとり(予定) テ…

template クラスの SFINAE

C++

template< typename T, typename U = void > struct has_value_type{ static const bool value = false; }; template<typename T> struct has_value_type<T, typename T::value_type>{ static const bool value = true; }; 最初はこんな感じでやろうとしたんですが、これだとうまく行きませんでした</t,></typename>…

複数条件での SFINAE

C++

template<typename T> void func(typename boost::disable_if<boost::is_pod<T> >::type* = 0){ std::cout << "is no POD" << std::endl; } template<typename T> void func(typename boost::enable_if<boost::is_pod<T> >::type* = 0){ std::cout << "is POD" << std::endl; } func(10); // is POD func("test"); // is</boost::is_pod<t></typename></boost::is_pod<t></typename>…

ベクトルの要素へのアクセス 〜その5〜

[ベクトル型の例] boost::array<float, 3> array_vec; std::valarray<float> valarray_vec; struct my_vec{ float x, y, z; }; 0.各アクセッサを使用するために最低限必要な実装 x, y, z の要素の型を取得すために vec_value の特殊化を行います。 [使用例] my_vec vec; vec_</float></float,>…

ベクトルの要素へのアクセス 〜その4〜

まとめ イテレータによるアクセス iterator を使用して、イテレーティブにアクセスを行う インデックスによるアクセスと、要素への直接アクセスも使用できる インデックスでアクセス インデックスを使用して、配列の様にアクセスを行う 要素への直接アクセス…

ベクトルの要素へのアクセス 〜その3〜

#include <boost/iterator_adaptors.hpp> #include <d3dx9.h> struct my_vec{ float x, y, z; }; //----------------------------------------------------------------------------- template<typename T> struct vec_traits; template<> struct vec_traits<my_vec>{ static const int dimension = 3; typedef float va</my_vec></typename></d3dx9.h></boost/iterator_adaptors.hpp>…

ベクトル型の要素へのアクセス 〜その2〜

#include <vector> #include <d3dx9.h> #include <pstade/oven/at.hpp> #include <pstade/oven/make_range.hpp> template<typename T> auto begin(T& v)->decltype(&v.x){ return &v.x; } template<typename T> auto end(T& v)->decltype(&v.z){ return (&v.z)+1; } template<typename T> auto at(T& v, int n) ->decltype(…</typename></typename></typename></pstade/oven/make_range.hpp></pstade/oven/at.hpp></d3dx9.h></vector>

ベクトル型の要素へのアクセス

ベクトル型へ汎用的にアクセスを行うための仕組みをいくつか考えてみました。 戻り値に関しては、ひとまず、float で決め打ちしています。 (こっちもぼちぼち考えます。) 案1.全てのベクトル型に対して、関数をオーバーロードする template<typename T, int N> T& at_x(boost:</typename>…