タグ

Boostとtemplateに関するrydotのブックマーク (5)

  • テンプレートの推論された型をお手軽確認 - Qiita

    テンプレートを書いていて、推論された型を確認したい テンプレートを記述していると 「この引数を与えたときには、Tがどう推論されるのか?」 なんて思うことは良くありますよね? 嗚呼、そんなとき、どーしたらよいのでしょーか? たとえば template < typename T > void f(T&&){} void g(int const&){}; int main(){ f(g); } この場合のTがどう推論されるのか知りたい! と思ったとき、どうしますか? 諦める IDEに頼る typeid.name()を使う Boost.Typeindexを使う Attributeを使う(C++14) IDEに頼る フォーカスすると情報が表示されるのを利用する IDEを使っている場合は概ねこれで事足りる typeid.name()を使う ヘッダをインクルードして この方法では実行時までわからない型情

    テンプレートの推論された型をお手軽確認 - Qiita
  • boost::optionalをパターンマッチする関数 - Faith and Brave - C++で遊ぼう

    match function on sum types - std-proposals Vicenteさんが標準向けに提案していた関数を元に、boost::optional用のパターンマッチ関数を作ってみました。 実装 shand/match.hpp shand/type_traits/is_callable.hpp コード例 libs/match/example/match.cpp テスト libs/match/test/match.cpp インタフェース: // shand/match.hpp namespace shand { // 1引数版 template <class T, class F> void match(boost::optional<T>& x, F f); template <class T, class F> void match(const boost::op

    boost::optionalをパターンマッチする関数 - Faith and Brave - C++で遊ぼう
  • Boost.Variant の assign の処理 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    かなり面白かったので書いてみます。 代入する型が一致する場合 まずは小手調べ。簡単に代入できる場合までの処理。 Boost 1.40.0 では以下の実装になっています。 void variant_assign(const variant& rhs) { if (which_ == rhs.which_) { detail::variant::assign_storage visitor(rhs.storage_.address()); this->internal_apply_visitor(visitor); } else { assigner visitor(*this, rhs.which()); rhs.internal_apply_visitor(visitor); } } template <typename T> void assign(const T& rhs) { det

    Boost.Variant の assign の処理 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • Faith and Brave - C++で遊ぼう

    levtech.jp 前編では2024年現在おすすめしたいC++書籍を紹介しました。 後編では、仕事でソフトウェア開発しながらも、余暇の時間にC++語リファレンスサイトや書籍の執筆、勉強会の開催などをしている立場からおすすめしたい、技術書以外のを紹介する記事を書かせていただきました。 levtech.jp キャリアと技術のWebメディアであるレバテックLABで、C++技術書を紹介する記事を書かせていただきました。 2024年現在でC++を学ぶための材料として参考になれば幸いです。 github.com 2024年もCEDECでcpprefjp所属の方の発表があるので、それに合わせてcpprefjp Tシャツを作ります! 発表者だけでなく、cpprefjpのコントリビューターとスポンサーの方も、実費をいただければ発注します。 この機会に、cpprefjp Webサイトの編集に挑戦くだ

    Faith and Brave - C++で遊ぼう
  • 動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary

    boost::shared_ptr は動的削除子 (dynamic deleter) と呼ばれる技法に基づいて実装されています.この動的削除子という技法で重要なのは, boost::shared_ptr が最終的に呼び出す解放処理が boost::shared_ptr のテンプレート引数の型に関係なく,コンストラクタに実際に渡されたポインタの型で,かつ boost::shared_ptr のコンストラクタの呼び出しの段階で 決定する,ということです. 以下のようなコードが,動的削除子の効果が一番分かりやすい例になるでしょう. class X{ public: ~X() { std::cout << "X::~X" << std::endl; } }; class B{ public: ~B() // virtual でないことに注意!! { std::cout << "B::~B" <<

    動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary
    rydot
    rydot 2010/04/16
  • 1