タグ

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

  • C++1z 畳み込み式 - Faith and Brave - C++で遊ぼう

    C++1zでは、「畳み込み式 (Fold expressions)」という機能が入ります。これは可変引数テンプレートのパラメータパックに対して集計操作を行うためのものです。 たとえば、整数のシーケンスを与えてその合計値を求める計算は、以下のように書けます: #include <iostream> template <class... Args> int sum(Args... args) { // 「... @ args」が畳み込み式。@の部分は任意の二項演算子 return (... + args); } int main() { int x = sum(1, 2, 3, 4, 5); std::cout << x << std::endl; // 15 } このような計算はこれまで再帰を使用して実装する必要がありましたが、より簡潔に書けるようになりました。 ここでは、argsパラメータ

    C++1z 畳み込み式 - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2016/12/08
    すごい
  • Effective Modern C++の予約開始 - Faith and Brave - C++で遊ぼう

    EMC++ Exits Publishing Purgatory! - The View From Aristeia Effective Modern C++ - O'Reilly Effective Modern C++ - Amazon.co.jp Scott Meyersの著書『Effective C++』のC++11とC++14対応である『Effective Modern C++ (略称EMC++)』の予約が開始しました。発売は12月4日になっています。 副題は「42 Specific Ways to Improve Your Use of C++11 and C++14」、日語だと「C++11とC++14の使い方を改善する42の方法」といったところでしょうか。

    Effective Modern C++の予約開始 - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2014/11/15
    欲しい
  • C++14の仕様策定が完了しました - Faith and Brave - C++で遊ぼう

    We have C++14! - Standard C++ C++14のDIS(Draft International Standard)に対する各国の投票が行われ、満場一致で承認されました。各国から(主に日から)のコメントによる文面の細かな修正が残っていますが、その作業が完了次第、ISO/IEC 14882:2014(E) Programming Language C++、別名C++14の規格が発行されます。 C++14は、2011年に発行されたC++11に対するマイナーバージョンアップです。小さな機能追加、および文面のバグ修正が含まれます。 C++14の更新内容は、以下のエントリにまとめてあります: C++14の言語拡張まとめ コンパイラの実装状況(言語機能) 次はC++17です。そちらはメジャーバージョンアップになる予定で、その議論はすでに始まっています。

    C++14の仕様策定が完了しました - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2014/08/19
  • C++1y 文字列のsplit - Faith and Brave - C++で遊ぼう

    N3593 std::split(): An algorithm for splitting strings 文字列を、指定した区切り文字で分割するsplit()関数が提案されています。 // 文字列をカンマで分割する vector<string_view> v { split("a,b,c", ",") }; // v == {"a", "b", "c"} split()関数の戻り値は、今のところstring_viewのなんらかのRangeが返される、ということで考えられています。 string_viewと、コンテナのRangeを受け取るコンストラクタ追加とセットで提案されています。 区切り文字を指定する方法としては、以下の3つのクラスを提供することが考えられています: char_delimiter : 1文字で区切り文字を指定する literal_delimiter : 区切り文字列を

    C++1y 文字列のsplit - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2013/04/09
  • std::shared_ptrのスレッド間コピーはスレッドセーフ - Faith and Brave - C++で遊ぼう

    C++11標準ライブラリのスレッド安全性 オブジェクトがスレッド間共有される内部状態を持つ場合でも、データ競合が生じないことを保証する。例:スレッド毎のstd::shared_ptrオブジェクトが同一オブジェクトを指しているとしても、各スレッド上で行われるstd::shared_ptrオブジェクト操作を安全に行える。[7](17.6.5.9/p7) [7]:例えばstd::shared_ptrが参照カウンタ方式で内部実装されていた場合、処理系はその参照カウンタ更新をデータ競合なしに行う義務がある。 std::shared_ptrの参照カウンタはアトミックであることが義務付けられている、という話は前から知っていたものの、どこに書いてあるのかわからず悩んでましたが、id:yohhoy先生がすでに調べてくれてました。 これの経緯としては、N2351 Improving shared_ptr fo

    std::shared_ptrのスレッド間コピーはスレッドセーフ - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2013/03/28
    ほー
  • Boost.Chrono/Dateが開発中らしい - Faith and Brave - C++で遊ぼう

    2013年のBoostのGoogle Summer of Codeプロジェクトを眺めていたら、こんなのがありました。 Boost.Chrono/Date Complete the Boost.ChronoDate [1] library based on [2] to make it ready for review. [1] https://svn.boost.org/svn/boost/sandbox/chrono_date/ [2] https://svn.boost.org/svn/boost/sandbox/chrono_date/libs/date/doc/date.html This project will be mentored by Vicente J. Botet Escriba 今まで時間のみを扱っていたBoost.Chronoですが、日付を扱うプロジェクトが進めら

    Boost.Chrono/Dateが開発中らしい - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2013/03/27
    この iteration 的な奴いいなー
  • https://faithandbrave.hateblo.jp/entry/20130305/1362471502

    mattn
    mattn 2013/03/05
  • boost::string_ref - Faith and Brave - C++で遊ぼう

    部分文字列に対する操作で、以下のような処理をよく書くと思います。 #include <string> std::string extract_part(const std::string& str) { return str.substr(2, 3); } int main() { if (extract_part("ABCDEFG").front() == 'C') { ... } } std::stringのメンバ関数を使いたいからchar配列からstd::stringに変換し、部分文字列を得るためにsubstr()メンバ関数を使っています。 しかしそのためにstd::stringの一時オブジェクトができてしまうので、効率はよくありません。 Boost 1.53.0から、このような場合に使用するstring_refというクラスが導入されました。これは以下のように使用します。 #incl

    boost::string_ref - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2013/02/07
  • C++1y boolへの変換演算子をコンテナに持たせる - Faith and Brave - C++で遊ぼう

    N3509 Operator Bool for Ranges std::vector、std::stringといったコンテナクラスに、operator boolを持たせよう、という提案。 これがあると、!empty()を必要とする状況でプログラムの冗長性を解消できる、というのが動機です。 // 従来の方法 string s = f(); if (!s.empty()) { // sを使った処理 } // operator boolがある場合 if (string s = f()) { // sを使った処理 } こういう書き方は、Boost.Optionalでよく使います。文字列だと、1行ずつのファイル読み込み処理などで使えると思います。 boolへの変換演算子は、Boost.Rangeのiterator_rangeではすでに提供されています。

    C++1y boolへの変換演算子をコンテナに持たせる - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2013/01/25
    欲しい
  • Boost.Coroutineが採択されました - Faith and Brave - C++で遊ぼう

    Review results for Coroutines コルーチンライブラリであるBoost.Coroutineが採択されました。 ドキュメントは以下になります: http://ok73.ok.funpic.de/boost/libs/coroutine/doc/html/ 以下レビュー結果の翻訳です。 == Oliver Kowalkeによって書かれたCoroutineライブラリに対して、2012/9/3から2012/9/12までの期間でレビューが行われた。7票の賛成票が提出され、いくつかの追加機能のリクエストが行われた。全体として、コミュニティの決定が明確になった: 「Oliver KowalkeのCoroutineライブラリを採択する」 盛んに行われた議論は、以下のポイントに触れた。 設計 Coroutineライブラリは、コミュニケーションソフトウェアと組み込みソフトウェアの設計

    Boost.Coroutineが採択されました - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/12/04
  • Boostをサポート環境外で動かす - Faith and Brave - C++で遊ぼう

    このエントリは、C++ Advent Calendar 2012の参加記事です。 Boost C++ Librariesは多くの環境をサポートしていますが、Boostでも手の届かない環境があります。それは、公開されていない開発環境です。たとえば、ゲームコンソールの開発環境は公開されていないので、ワークアラウンドを自分で書くことはできても、それを公開することはできません。 そういった環境で「Boost使えない!」と言って終わってしまうケースをたまに見ますが、Boostは多くの環境をサポートするために機能ごとのワークアラウンドを提供しているので、自分で設定を書けばサポート環境外でもBoostが使えます。 この記事は、クローズドなサポート外環境への設定を書く方法と、サポート環境とサポート外環境を含めたマルチプラットフォーム化のノウハウを紹介します。 環境を知り、環境を入力する Boostでは、環

    Boostをサポート環境外で動かす - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/12/01
  • 『C++のためのAPIデザイン』レビュー - Faith and Brave - C++で遊ぼう

    翻訳監修の三宅さん( @miyayou )さんから献いただきました!ありがとうございます。 書は、関数、クラス、ライブラリといった誰かに使ってもらうためのプログラムを書くプログラマのためのです。ほかの人に使ってもらうプログラムを書くために考えるべき多くのことが書かれています。たとえば、以下のようなことを考える必要があります: ユーザーに公開するインタフェースはどうあるべきか。実装詳細はどれで、ユーザーは何を知っていれば十分なのか。それはどの場面で使用できるだろうか、いま目の前にある目的を達成できればいいのか、はたまた多くの場面で再利用したいのか。 バージョンに関しても考えなければいけない。このAPIは後方互換性を保てるほど入念に考えられているだろうか。どうしても破壊しなければいけない場合、どういう設計選択をするべきか。 ドキュメントはどこまで書くべきだろうか。自動テストは何のために書

    『C++のためのAPIデザイン』レビュー - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/11/02
  • C++ Advent Calendar 2012 - Faith and Brave - C++で遊ぼう

    C++ Advent Calendar 2012 - PARTAKE 今年もやります!C++ Advent Calendarです! 去年はC++11とBoostで分かれていましたが、今年は分けずに行く予定です。 ぜひみなさん参加してください。

    C++ Advent Calendar 2012 - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/11/01
  • 旧Boost日本語リファレンスを引き取りました - Faith and Brave - C++で遊ぼう

    旧Boost日語リファレンス( http://boost.cppll.jp/HEAD/ )がcppllで運営されていましたが、最近はもうだれもメンテしてなかったので、私の方で引き取りました。 とりあえず、文字化けを解消してGitHubページに置いておきました。 サイト: http://boostjp.github.com/ リポジトリ: https://github.com/boostjp/boostjp.github.com まだ運営方針も決まってないので、とりあえず置いてあるだけです。 cpprefjpの方がなかなか目処が立たないので、しばらくこのままです。 ドキュメントは古いままなので、最新のつもりで参照はしないでください。

    旧Boost日本語リファレンスを引き取りました - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/06/20
  • C++Now! 2012に参加してきました - Faith and Brave - C++で遊ぼう

    毎年5月にアメリカのコロラド州アスペンで開催されているBoostConというBoost C++ Librariesのカンファレンスが今年からC++Now!という名前に変わり、今回それに近藤さん id:redboltz と一緒に参加してきました。 非技術的な内容は、後ほどBloggerの方に書こうと思います。 1週間の濃厚な日々の記録のため、けっこう長くなってしまうことをご容赦ください。 0日目(日曜日) Registration 初日は16:00から参加登録 + 雑談を行うRegistrationがありました。会場に入った途端自己紹介もしてないのに「Are you cpp_akira?」と話しかけてきた外人さんがいて、「あ、これが噂の日語を話せるRay Fixか!」とすぐに把握して近藤さんに紹介されつつ少し話してました。その後、今回Boost.Coroutineの発表を行ったNat Go

    C++Now! 2012に参加してきました - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/05/22
  • std::arrayのイテレータはポインタとは限らない - Faith and Brave - C++で遊ぼう

    boost::arrayのiteratorは、ドキュメント上ポインタであることが明記されていました。 namespace boost { template <typename T, std::size_t N> class array { public: ... typedef T* iterator; typedef const T* const_iterator; ... }; } Boost 1.49.0 boost::array documentation C++11のstd::arrayのiteratorは、規格上「implementation-defined(実装定義)」となっているので、環境によってはポインタではないかもしれません。汎用的なコードを書く場合にはご注意を。 namespace std { template <class T, size_t N> struct a

    std::arrayのイテレータはポインタとは限らない - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/04/17
    ひー。死ねるコード幾つか書いてる。
  • ラムダ式でいらないパラメータを無視する - Faith and Brave - C++で遊ぼう

    元々boost::bindなどを使って必要なパラメータだけ受け取るようにしていた関数をラムダ式に置き換える場合、いらないパラメータを無視するにはどうすればいいでしょう。と考えて、テンプレートなコンストラクタだけを持つクラスを用意すればよさそうだったのでやってみました。 #include <iostream> #include <string> struct ignore_param { template <class... Args> ignore_param(Args&&...) {} }; template <class F> void foo(F&& f) { std::string name = "Akira"; int age = 27; std::string lang = "C++"; f(name, age, lang); } int main() { foo([](con

    ラムダ式でいらないパラメータを無視する - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/03/14
  • newした配列のサイズ - Faith and Brave - C++で遊ぼう

    newした配列は最後にdelete[]を使って解放するわけですが、「何個解放するか」は誰が知ってるのか。 コンパイラによって異なると思いますが、GCC 4.6では先頭要素の1つ前にサイズが入ってました。 #include <iostream> struct X { X() { std::cout << "ctor" << std::endl; } ~X() { std::cout << "dtor" << std::endl; } }; int main() { const std::size_t n = 3; X* xs = new X[n]; std::cout << *(reinterpret_cast<std::size_t*>(xs) - 1) << std::endl; delete[] xs; } ctor ctor ctor 3 dtor dtor dtorただし、デストラ

    newした配列のサイズ - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2012/02/24
    おもしろい
  • 『プログラミングの魔導書 Vol.2』予約開始! - Faith and Brave - C++で遊ぼう

    株式会社ロングゲート - プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.2 Vol.1から約1年経ってしまいましたが、日、 『プログラミングの魔導書 〜Programmers' Grimoire〜』 Vol.2 The Evolution of Languages の予約を開始いたしました。 Vol.2のテーマは「言語の進化」です。 いろいろな言語における日の第一人者と言って差し支えない日人プログラマの方々に、歴史や現在の状況、今後の展開について執筆していただきました。 書では、Boost C++ Librariesの設計者であるDave Abrahamsへのインタビューに成功しました。ライブラリが言語の進化にどう貢献していくのか、プログラマにライブラリをどう教育していくのか、などを伺いました。 書のコンテンツおよび執筆者は以下のとおりです。 D

    『プログラミングの魔導書 Vol.2』予約開始! - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2011/09/15
  • C++0xが国際標準C++11へ。 - Faith and Brave - C++で遊ぼう

    cppllとboostjpに送ったメールですが、こちらにも再掲します: == ついに ねんがんの 国際標準をてにいれたぞ!: C++0x、全会一致で承認される C++0xが満場一致で国際標準として承認されました。 やりました! 日からも全員が賛成票を出していました。 さて、C++11の仕様が固まってこれから大きな変更はないでしょうから、 そろそろC++11の解説サイトやリファレンスを整備していかなくてはいけません。 cppll, boostjpのコミュニティで集合知としてのリファレンスサイトを作っていきたいと考えています。 私の方でGoogle Sitesのcpprefjpを作成し進めているのですが、人手不足でなかなか進んでいない状況です。 cpprefjp - C++語リファレンス この活動に興味を持ち、コアメンバとなってくれる方を募集しています。 C++11が広く使われて欲しいと

    C++0xが国際標準C++11へ。 - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2011/08/14