タグ

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

  • boost::any_range - Faith and Brave - C++で遊ぼう

    Boost 1.46.0から、Boost.Rangeにany_rangeが導入されました。 any_rangeは、Type ErasureによってあらゆるRange型をlazy状態に保ったまま格納するための型で、Rangeアダプタの適用結果を変数に持つ場合や、Rangeアダプタの適用結果を関数の戻り値にしたい場合などに使用します。 #include <iostream> #include <vector> #include <boost/assign/list_of.hpp> #include <boost/range/adaptor/filtered.hpp> #include <boost/range/any_range.hpp> #include <boost/range/algorithm/for_each.hpp> bool is_even(int x) { return x %

    boost::any_range - Faith and Brave - C++で遊ぼう
    zetamatta
    zetamatta 2019/09/21
  • C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう

    Results of the Grand C++ Error Explosion Competition 少し前に、C++のコンパイルエラーの長さを競うコンテストが開催されていました。 受賞のカテゴリは2つあり、ひとつめは最小コードで最大のコンパイルエラーを出した人、もうひとつは芸術的な評価による受賞です。 最小コードで最大のコンパイルエラー この部門で優勝したのはEd Hanwayさんという方で、ソースコード量に対して59億倍のコンパイルエラーメッセージを出力したそうです。 それには、自身を2回インクルードするという手法が使われていたそうです。 #include ".//.//.//.//jeh.cpp" #include "jeh.cpp" 次点として、インクルードに後方参照を使用した、7億9千万倍のコンパイルエラーを出力するコード: #include "set>.cpp" #incl

    C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう
    zetamatta
    zetamatta 2017/06/22
    想像を絶していた>「ソースコード量に対して59億倍のコンパイルエラーメッセージを出力したそうです」
  • C++1z 型安全な共用体variantクラス - Faith and Brave - C++で遊ぼう

    C++1zから、型安全な共用体(type-safe union)の実装であるvariantクラスが導入されます。 このクラスは、テンプレート引数で与えた候補型のリストに含まれる型のオブジェクトを代入できる型です。また、ビジター関数オブジェクトを使用することにより、現在代入されている型のオブジェクトを、安全に操作できます。 variantクラスとその関連操作のために、<variant>ヘッダが新設されます。 #include <iostream> #include <variant> #include <string> struct visitor { void operator()(int x) { std::cout << "int : " << x << std::endl; } void operator()(const std::string& x) { std::cout <<

    C++1z 型安全な共用体variantクラス - Faith and Brave - C++で遊ぼう
    zetamatta
    zetamatta 2017/03/28
    うわぁ、COMでおなじみの Variant みたいなのが、std になるのか。つーか、テンプレートで実現できるとは思ってなかったよん
  • GCC 5.0のC++関係機能 - Faith and Brave - C++で遊ぼう

    https://gcc.gnu.org/gcc-5/changes.html 網羅的ではなく、気になったものだけ抽出して書いています。 C++11、C++14関係の対応状況は、cpprefjpサイトにもほぼ反映しました。 C++14を全実装 変数テンプレート 宣言時のメンバ初期化を持つ型の集成体初期化を許可 constexprの制限緩和 サイズ付きデアロケーション -std=c++14オプションが使えるようになる。旧-std=c++1yオプションは非推奨。 C++11周りのライブラリサポート改善 std::listのsize()メンバ関数が、デフォルトでO(1)になる std::dequeとstd::vector<bool>に、ステートフルアロケータのサポートを追加。 iostreamのクラスに、ムーブとswapのサポートを追加。 std::alignとstd::aligned_union

    GCC 5.0のC++関係機能 - Faith and Brave - C++で遊ぼう
  • C++1y - Filesystemライブラリの提案 - Faith and Brave - C++で遊ぼう

    N3399 Filesystem Library Proposal (Revision 3) C++1yでは、ディレクトリ操作、ファイルの削除や移動といった操作を行う、Filesystemライブラリが提案されています。 提案者はBoost.Filesystem作者のBeman Dawesで、仕様はBoost.Filesystem V3ベースのものになっています。V3の特徴としては、basic_pathのような文字型をテンプレートパラメータにする設計ではなく、pathという単一の型であらゆる文字型を扱う設計になっている、というものがあります。 ちなみに、VC11にはFilesystemライブラリがstd::tr2名前空間で実験的に入っていたりしますが、これはbasic_pathのような設計になっているFilesystem V2ベースのものです。Microsoft的には、V3の設計に懐疑的らし

    C++1y - Filesystemライブラリの提案 - Faith and Brave - C++で遊ぼう
    zetamatta
    zetamatta 2012/10/12
    今まで、なぜなかったのか
  • ICU Shift_JISとUTF-8の変換 - Faith and Brave - C++で遊ぼう

    こんな感じで。 #include <vector> #include <string> #include <icu/unicode/unistr.h> std::string utf8ToSjis(const std::string& value) { icu::UnicodeString src(value.c_str(), "utf8"); int length = src.extract(0, src.length(), NULL, "shift_jis"); std::vector<char> result(length + 1); src.extract(0, src.length(), &result[0], "shift_jis"); return std::string(result.begin(), result.end() - 1); } std::string sji

    ICU Shift_JISとUTF-8の変換 - Faith and Brave - C++で遊ぼう
    zetamatta
    zetamatta 2010/03/20
    ふと、shift_jis じゃなくて、cp932 とか ms932 の方がいいんじゃないかなと思った俺は重症。ICU はどこからゲトするのが正しいんだろう。
  • 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++で遊ぼう
    zetamatta
    zetamatta 2008/10/18
    C++ もアグレッシブになったもんだねぇ
  • 1