タグ

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

  • C++標準ライブラリの数学定数への道のり - Faith and Brave - C++で遊ぼう

    P0631R8 Math Constants C++20で数学定数が入ることが決まりましたね。やっと標準ライブラリの範囲で円周率を定数として使えるようになります。 ここまでの道のりですが、 constexpr (C++11) 変数テンプレート (C++14) インライン変数 (C++17) 数学定数 (C++20) とても長かったですね。 #include <iostream> #include <numbers> template <class T> T degree_to_radian(T x) { return x * std::numbers::pi_v<T> / static_cast<T>(180.0); } int main() { float y = degree_to_radian(90.0f); std::cout << y << std::endl; // 1.570

    C++標準ライブラリの数学定数への道のり - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2019/08/22
    涙なしでは語れない
  • C++17標準ライブラリの細かい変更いろいろ その1 - Faith and Brave - C++で遊ぼう

    最近cpprefjpに書いたものを列挙します。 assertマクロがconstexpr関数内で使用できるようになった std::next()関数のイテレータ要件がForward IteratorからInput Iteratorに緩和された std::addressof()がconst T&&の引数を禁止にした。addressof<const T>(T())のようにするとconst T&&が指定できていた std::addressof()がconstexprに対応した std::mutexとかstd::recursive_mutexのlock()メンバ関数が、device_or_resource_busyのエラーを起こらなくした 非順序連想コンテナのreserve()メンバ関数が、C++14までn-1以上の予約していたが、C++17からn以上が予約されるようになった std::shared_

    C++17標準ライブラリの細かい変更いろいろ その1 - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2017/07/04
  • C++テンプレートテクニック 第2版 を出します - Faith and Brave - C++で遊ぼう

    2009年に出版した書籍『C++テンプレートテクニック』の第2版を出版します。 C++テンプレートテクニック 第2版 - Amazon.co.jp C++テンプレートテクニック 第2版 - SBクリエイティブ 発売日は、2014年4月17日(木)です。 C++テンプレートテクニック 書は、プログラミング言語C++のテンプレート機能に関する技法を解説したです。 プログラムをより汎用的にしていくにあたって起きる、様々な問題への解法を提供します。 第2版の更新内容 第2版の主な更新は、C++11への対応です。C++11に追加された機能を使用した各種技法を掲載しています。C++03の技法で今もなお有用なものは残してあります。 第2版では、以下のような変更を行いました: 第1版の章「Extension Member Function」および「C++0xにおけるテンプレート」を削除 新章「コンセプ

    C++テンプレートテクニック 第2版 を出します - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2014/03/27
    ノータイムでAmazon直行
  • C++0x - Variadic Templates - Faith and Brave - C++で遊ぼう

    可変長テンプレート引数 こんなことができるようになる template <class... Types> class tuple; tuple<> tup0; tuple<int, string> tup1(3, "abc"); tuple<int, string, double> tup2(3, "abc", 3.14); sizeof...演算子を使用すると型の数を取得できる template <class... Types> struct count { static const int value = sizeof...(Types); }; Variadic Templatesを使用するクラスはやはり再帰テンプレートを使って処理するようだ template <int Index, class... Types> struct tuple_impl; template <int I

    C++0x - Variadic Templates - Faith and Brave - C++で遊ぼう
  • 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++で遊ぼう
    nharuki
    nharuki 2010/08/09
    constなメンバ関数にちゃんとconst表記してあるかが「C++の良書」を見分ける基準になるというライフ ハック
  • C++0x - 右辺値参照(Rvalue reference) / ムーブ・セマンティクス(Move semantics) - Faith and Brave - C で遊ぼう

    コピー(一時オブジェクト)を作成せず、ポインタの移動しようというもの 移動されたオブジェクトは破壊される(関数の戻り値等の右辺値は破壊しても全く問題ないでしょ) 一時オブジェクトを作らないので、より高速で無駄のないプログラミングができるようになる struct string { // copy semantics string(const string& s) : data_(new char[s.size_]), size_(s.size_) { memcpy(data_, s.data_, size_); } string& operator=(const string& s) { if (this != &s) { if (size_ < s.size_) // get sufficient data buffer size_ = s.size_; memcpy(data_, s.d

    C++0x - 右辺値参照(Rvalue reference) / ムーブ・セマンティクス(Move semantics) - Faith and Brave - C で遊ぼう
  • C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう

    C++0xになると、C++03でごちゃごちゃした部分がだいぶ すっきり書けるようになるので、C++0xでの入門はこんな感じになるよー、 という気持ちで書きました。 1. Hello World C++0xでの入出力には、IOStreamというものを使用します。 <<演算子でどんどんつないでいきます。 以下のプログラムの読み方は 「標準出力(cout)に"Hello World"という文字列と、改行(endl)を出力する」 です。 #include <iostream> int main() { std::cout << "Hello World" << std::endl; return 0; } Hello World coutとendlを使用するには、 #include <iostream> のように、という標準ライブラリのファイルを読み込む必要があります。 2. コメント 行コメント

    C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう
  • C++0x 新たな関数宣言構文 - Faith and Brave - C++で遊ぼう

    以下のように、戻り値の型を後ろに書けるようになる // now std::vector<double> foo(double); // new auto foo(double) -> std::vector<double>; 戻り値の型を後置すると、decltype でパラメータを計算した型を戻り値の型にできる template <class T, class U> auto foo(T t, U u) -> decltype(t * u) { return t * u; } いろいろ応用できそうな気がする N2541 New Function Declarator Syntax Wording C++0x言語拡張まとめ

    C++0x 新たな関数宣言構文 - Faith and Brave - C++で遊ぼう
  • C++0xの言語拡張まとめ(※随時更新) - Faith and Brave - C++で遊ぼう

    C++0xの概要はこちら ・Angle bracket テンプレートの連続した山カッコの問題の解決 ・初期化子リスト ユーザー定義のクラスで配列のような初期化構文を実装可能になる ・Uniform initialization コンストラクタの構文と初期化子リストの構文が一様になる ・デリゲーティング・コンストラクタ コンストラクタから他のコンストラクタを呼び出せる ・auto 型推論 ・記憶クラス指定子としての auto の削除 autoキーワードの意味が変更になるため、下位互換がなくなる ・decltype sizeofの型版 ・Template Aliases テンプレートを使用して型の別名を付けることができる。いわゆるtemplate typedef ・拡張sizeof 構造体/クラスのメンバをインスタンス化せずにsizeofすることが可能になる ・nullptr ヌルポインタを表

    C++0xの言語拡張まとめ(※随時更新) - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2010/07/22
  • [Grimoire]「プログラミングの魔導書」予約開始! - Faith and Brave - C++で遊ぼう

    2010/7/16 10:29: 大変お待たせいたしました。予約を再開しましたので、よろしくお願いします。 ============ 長らくお待たせしましたが、弊社ロングゲート刊行の 「プログラミングの魔導書」の予約を開始しました。 「プログラミングの魔導書」 - 株式会社ロングゲート 製品紹介 今回は弊社Webサイトでの専売となっております。 また、受注生産の形態をとっているため、書籍版に関しては予約でのご注文のみとなりますのでご注意ください。 PDF版は予約期間が過ぎた後でもご購入いただけます。 予約期間は2010年8月6日(金)までです。 価格: 書籍版 : 1,500円(税込・送料別) PDF版 : 1,000円(税込) 書籍+PDFセット : 2,000円(税込・送料別) 商品情報: ページ数 : 158 書籍版ISBN : 978-4-9905296-0-4 PDF版ISBN

    [Grimoire]「プログラミングの魔導書」予約開始! - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2010/07/14
    あとでというか、今日
  • Boost.FunctionのRTTI無効化対応 - Faith and Brave - C++で遊ぼう

    Trac - Add function support for rtti disabled environments Boost 1.42.0から対応されていたみたいです。 RTTI無効時は、std::type_infoの代わりに、<boost/detail/sp_type_info.hpp>にある boost::detail::sp_typeinfoが使われるようです。 また、typeidの代わりにBOOST_SP_TYPEID(T)マクロを使用します。

    Boost.FunctionのRTTI無効化対応 - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2010/06/17
    type_infoの代用実装になる?
  • 「プログラミングの魔導書」の情報公開 - Faith and Brave - C++で遊ぼう

    http://longgate.co.jp/products.html 弊社、株式会社ロングゲートで、プログラミング雑誌を作るというプロジェクトが進行しています。 書創刊の目的は、プログラミングの入門記事が巷に溢れる今、プログラマのさらなる成長のため情報発信を行い、業界全体の技術力を向上させることです。 雑誌といっても、記事の質を保つために不定期刊行としていることから、実際には雑誌ライクな書籍となります。 書籍名は「プログラミングの魔導書〜Programmers' Grimoire〜」です。 創刊号となる今回のテーマは、サブタイトルにも含まれている「C++」です。全ての記事がプログラミング言語C++に関するものとなっています。 Vol.1のテーマをC++としたのは奇をてらったものではありません。 C++は習得の難しい言語と言われておりますが、近年はBoost C++ Librariesに

    「プログラミングの魔導書」の情報公開 - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2010/06/01
    ついに発表されましたか。待ってました!
  • vtable版Type Erasureでコードに直接現れないロギング - Faith and Brave - C++で遊ぼう

    ロギングってイヤですよね。 コードが汚くなるし、1行しか処理がないのに 関数の出入りをロギングするために3行になってしまったり。 こういうときに、コードに直接現れない侵入的なロギングが必要だなと思います。 聞くところによると、それはAOPの動機にもなってるんだとか。 聞くところによると、それはBoost.Interfacesの動機にもなってるんだとか。 つまりこういうことですね。 #include <iostream> #include <string> #include <boost/noncopyable.hpp> class log : boost::noncopyable { public: static log& instance() { static log this_; return this_; } void out(const std::string& s) const

    vtable版Type Erasureでコードに直接現れないロギング - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2010/02/06
    ロギングコードと処理コードの分離
  • 1