タグ

ブックマーク / faithandbrave.hateblo.jp (16)

  • mpl::string - Faith and Brave - C++で遊ぼう

    というわけで、Boost 1.40.0でmpl::string(コンパイル時文字列!)が追加されたので 試してみました。 #include <iostream> #include <boost/mpl/string.hpp> using namespace std; namespace mpl = boost::mpl; int main() { typedef mpl::string<'Hell', 'o Wo', 'rld '> str; cout << mpl::c_str<str>::value << endl; } Hello World おぉ、ほんとに動くw ちなみに、試したのはVC++ 9.0 SP1とGCC 4.4です。

    mpl::string - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/09/01
    おおお。文字定数って 4 文字まで大丈夫だったなんて。。。!/関連 http://ml.tietew.jp/cppll/cppll/thread_articles/9456
  • Boost 1.40.0リリース - Faith and Brave - C++で遊ぼう

    comp.lang.c++.moderated - Boost release 1.40.0 is available Boost 1.40.0がリリースされました。 ダウンロードはこちらから。 今回のアップデートでは新規ライブラリはありませんが 以下のライブラリが更新され、バグがもろもろ直ってるそうです。 Accumulators Asio Circular Buffer Filesystem Foreach Function Fusion Hash Interprocess Intrusive MPL Program Options Proto Python Serialization Unordered Xpressive 以下メモ: fusion::vectorのコンパイル時間が早くなったらしい mpl::char_とmpl::stringが追加されたらしい

    Boost 1.40.0リリース - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/08/28
    さっそく、入れてみよう
  • コード量を減らすためだけのラムダ式活用 - Faith and Brave - C++で遊ぼう

    ※このエントリではIDEによるコード補完は一切考慮していません 【before】 #include <vector> int main() { std::vector<int> v; v.reserve(5); v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); } v.push_backって打つのめんどい><。 ↓ 【関数に切り出してみる】 #include <vector> template <class T> void push(std::vector<T>& v, const T& x) { v.push_back(x); } int main() { std::vector<int> v; v.reserve(5); push(v, 1); push(v, 2); push

    コード量を減らすためだけのラムダ式活用 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/07/29
    おおお。 LL みたいだ
  • constメンバ関数は重要 - Faith and Brave - C++で遊ぼう

    私は基的に、C++でソース書くときはやたらめったらconst付けます。 なぜならHaskellが好きだからです(ぇ じゃなくて、状態の変更によるバグを減らすためです。 しかし、他人が書いたソースを見てると、オブジェクトのconst操作を考えて設計されてないことが けっこうあり、Is〜とかGet〜といった名前の関数の中でメンバの状態を変更してたりします。 これはとくに、JavaやC#のようなconstメンバ関数がない言語からC++に移植するようなときに 起こりやすいのですが、C++でもconstメンバ関数の存在を知ってか知らずかconstが付いてないことが多々あります。 書籍でいうと、『Game Programming Gems』では明らかにconst操作なメンバ関数にconst付いてないですね。 C++で大きなプログラムを組む際は、元となるコード(移植元やライブラリ)がオブジェクトのco

    constメンバ関数は重要 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/07/16
    const メソッドの重要性。改めて確認。/全部のメソッドに const を付けてコンパイラに怒られたところを外していくくらいでいいかもしれない
  • Boost.Randomで簡単な確率 - Faith and Brave - C++で遊ぼう

    たまに欲しくなるのでメモ。 #include <iostream> #include <ctime> #include <boost/array.hpp> #include <boost/random.hpp> using namespace boost; int main() { // 80%の確率で0, 20%の確率で1 array<int, 10> probability = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1}; mt19937 gen(static_cast<unsigned long>(std::time(0))); uniform_int<> dst(0, probability.size() - 1); variate_generator<mt19937, uniform_int<> > rand(gen, dst); for (int i = 0;

    Boost.Randomで簡単な確率 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/06/29
    boost::variate_generator /アルゴリズムと分布を指定して乱数を生成。
  • VC++10 Beta 1の今さら気づいたC++0x機能 - Faith and Brave - C++で遊ぼう

    発表されてなかったので試してもいなかったのですが、 VC++10では戻り値の型を後置する関数宣言構文が使えるようです。 (autoと->のあたりに赤線引かれるけど) あと、decltype( ( v ) )も使えました。 #include <vector> #include <type_traits> using namespace std; // 関数の戻り値の型(vector<int>)を後置 auto foo() -> vector<int> { return vector<int>(); } int main() { vector<int> v = foo(); // decltype(v)はvector<int>で、decltype((v))はvector<int>& static_assert(is_same<decltype(v), vector<int>>::value,

    VC++10 Beta 1の今さら気づいたC++0x機能 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/06/24
    戻り値の型の後置、戻り値の型を仮引数を使った式の型から推論できるようになる。/SeeAlso: decltype
  • make_sharedの問題点 - Faith and Brave - C++で遊ぼう

    BoostML - make_shared and custom deleter BoostやC++0xにはmake_shared/allocate_sharedという、shared_ptrを生成するためのヘルパ関数があります。 template<class T, class... Args> shared_ptr<T> make_shared(Args&&... args); template<class T, class A, class... Args> shared_ptr<T> allocate_shared(const A& a, Args&&... args); shared_ptr<person> p = make_shared<person>(24, "Akira"); これはとても便利なのですが(newすら書かせないスマートポインタ!) Custom Deleterを指

    make_sharedの問題点 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/06/03
    make_shared、 Custom Deleter しらなかった/やっぱりこういうコードではクロージャすごい便利だ・・・早く使えるようになって欲しい
  • enum classをintに変換 - Faith and Brave - C++で遊ぼう

    C++0xで導入されるenum classは、C++03までのenumよりも型付けが 強くなっているのでint型への暗黙の型変換はできなくなっています。 enum class Color { Blue = 0, Yello, Red }; int color = Color::Red; // エラー!Colorからintへ変換できません 明示的な型変換ならいけるかな、と思ったのでenum classを実装しているGCC 4.4で試してみました。 int color = static_cast<int>(Color::Red); // OK : colorは2 明示的な型変換はできるみたいです。 intからenum classへの変換も、明示的な型変換をすればいけます。 void foo(Color color) {} foo(2); // エラー!第1引数をintからColorへ変換できま

    enum classをintに変換 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/05/25
    better enum としての enum class。/int への暗黙的型変換が出来ない enum。明示的型変換はできる
  • TR2のネットワークライブラリ - Faith and Brave - C++で遊ぼう

    N2175 Networking Library Proposal for TR2 (Revision 1) これはきっと、Boost.Asioになるはず。たぶん。

    TR2のネットワークライブラリ - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/05/22
    boost::asio が C++ 標準のネットワークライブラリになるらしい。
  • 「Iterators Must Go」を訳してみた - Faith and Brave - C++で遊ぼう

    Boost Con '09で行われたAndrei Alexandrescuのセッション、「Iterators Must Go」の資料を翻訳してみました。 【原文】 iterators-must-go.pdf 【日語訳】 iterators-must-go(ja).pdf 【Slideshare】 http://www.slideshare.net/faithandbrave/iterators-mustgoja 訳がおかしいところがあったら教えていただけるとうれしいです。 【修正履歴】 2009/05/15 19:25 コメント欄でturuginaさんから指摘いただいた点を修正 2009/05/18 10:57 コメント欄でportownさんから指摘いただいた点を修正

    「Iterators Must Go」を訳してみた - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/05/18
    Iterator の問題点、 Range を導入する事でより簡潔で安全にリスト内の要素に対する操作を書けるようになるというお話
  • C++0x explicit bool - Faith and Brave - C++で遊ぼう

    スマートポインタのようなクラスを作成する場合、if文でヌルポインタかどうか判定できるようにするために operator boolをオーバーロードします。 template <class T> class smart_ptr { T* p_; public: operator bool() const { return p_ != 0; } }; smart_ptr<int> p; // OK if (p) { // ポインタは有効 } else { // ポインタは無効 } しかし、この方法では以下のような意味のないコードもコンパイルが通ってしまいます。 float f = p; int x = p + 1; cout << p << endl; C++03には、この問題を解決するために"conversion to unspecified bool"というイディオムがあります。 これを使用

    C++0x explicit bool - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/04/30
    メンバポインタ→boolの暗黙変換はできるが、メンバポインタ→整数の暗黙変換はできない。この性質を生かして bool にだけ暗黙変換可能なクラスを生成するイディオム。/それを要らなくするための "explicit conversion"
  • 可変引数テンプレートでの型リストまとめ - Faith and Brave - C++で遊ぼう

    C++0xでは、可変引数テンプレートという機能が追加されます。 これを使うと、テンプレートパラメータを可変個受け取ることができ、 template <class... Args> // ...と書くと可変引数テンプレートになる class tuple; 可変引数テンプレートは型のリストと見なすことができます。 tuple<int> t1; // 要素1つ(int)の型リスト tuple<int, char> t2; // 要素2つ(int, char)の型リスト tuple<int, char, long> t3; // 要素3つ(int, char, long)の型リスト ということで、型リストがどこまでできるか試すために リスト処理を作ってみました。 headとtail - 先頭と後部 length - 長さ at - I番目の型を取得 concat - 型リストの連結 cons -

    可変引数テンプレートでの型リストまとめ - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/04/20
    型リストの操作、いろいろ
  • C++0xではメタ関数をコンセプトで書く(かも) - Faith and Brave - C++で遊ぼう

    C++03だと依存名に対してtypenameを付けないといけないので メタ関数書くとけっこう長くなってしまいます。 template <class T> struct identity { typedef T type; // これはいいんだけど }; template <class T> struct add_pointer { // メタ関数内でメタ関数呼んだりするとtypename付けるのめんどくさい typedef typename identity<T>::type* type; }; C++0xでは、コンセプト内で型を制約することによりそれが型であることが明示的になるから そのコンセプトを使う側ではtypenameを書かなくてもいいので、 メタ関数もコンセプトで書いちゃえばtypename省略できるんじゃないかと思ってます。 auto concept AddPointer<T>

    C++0xではメタ関数をコンセプトで書く(かも) - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2009/04/17
    concept を宣言すれば、メンバのメタな型(typename かどうか)を制約できるので、使う側では typename を書かなくてよくなる
  • https://faithandbrave.hateblo.jp/entry/20080514/1210755509

    amachang
    amachang 2008/11/17
    クラスに const メンバがあったりして、基底クラスの operator= が使えなくなる YO! という意図の警告らしい。 / http://msdn.microsoft.com/ja-jp/library/hsyx7kbz(VS.80).aspx
  • C++0x 「N1385 転送問題:引数」の日本語訳 - Faith and Brave - C++で遊ぼう

    公開します。 翻訳がおかしいところがあったら教えてください。 N1385 The Forwarding Problem - Arguments.pdf 原文はこれです。

    C++0x 「N1385 転送問題:引数」の日本語訳 - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2008/11/13
    C++0x で導入される右辺値参照の使いどころ。C++ の問題点としてもおもしろい。/ template<class A> void f(A& a) {} を f(1) で呼び出せないというところから、試行錯誤。すごい
  • 限定子としてのtemplate - Faith and Brave - C++で遊ぼう

    『プログラミング言語C++』 C.13.6 限定子としてのtemplate メンバ関数テンプレートにおいて、引数から型を推論できない場合template限定子を使うことになる だが、template限定子を使うようなことは稀だろう struct hoge { template T* get() { return 0; } template void set(T*) {} }; int main() { hoge h; int* p1 = h.get(); // 構文エラー:より小さい演算子のうしろにint int* p2 = h.template get(); // OK // こっちは引数で型推論できるからOK h.set(p1); return 0; } class hoge { public: template <class T> T* get() { return 0; } tem

    限定子としてのtemplate - Faith and Brave - C++で遊ぼう
    amachang
    amachang 2008/09/22
    言葉の整理「限定子=qualifier」/ 型推論できるか template arguments が要らない場所がある。知らなかった。要確認。
  • 1