タグ

templateに関するmogwaingのブックマーク (15)

  • 関数テンプレートの特殊化について - memologue

    関数テンプレートの特殊化いろいろ なんか日記を書くのを忘れていました。よくない。というわけで、最近おぼえたtipsを書きます。クラステンプレート内のテンプレートの特殊化(もどき)についての自分なりのまとめ。 まず、 namespace A { template<int V> static void YYY() { std::printf("default %d\n", V); } } int main() { YYY<0>(); YYY<128>(); } のような関数テンプレートがあるとき、これを特殊化*1した関数は namespace A { template<int V> static void YYY() { std::printf("default %d\n", V); } template<> static void YYY<128>() { std::printf("for

    関数テンプレートの特殊化について - memologue
    mogwaing
    mogwaing 2008/11/06
    about specialization
  • テンプレートの部分特殊化 - Wikipedia

    テンプレートの部分特殊化 (Partial template specialization)は、C++の用語で、テンプレートにおいて、特定のテンプレート実引数が与えられたときに、元と異なる定義を使用させるようにする仕組みである。 テンプレートと明示的特殊化[編集] テンプレートはメタクラスである。つまりコンパイラに対してどのようなクラスを作るかを指示したある種の抽象データ型であると言える。たとえばテンプレートであるvector(動的配列)をプログラマが使うときには、vector<int>、vector<string>などのようにデータ型を指定して実体化する。実体化されたvectorは、コンパイラの生成したオブジェクトコードの中ではそれぞれ別のコードが生成され、それぞれ別のクラスとして扱われる。 もしテンプレートクラスは特定のデータ型を指定して使われることが多いと知っており、そのデータ型の場

    mogwaing
    mogwaing 2008/11/06
    about specialization
  • Kazuho@Cybozu Labs: C++ テンプレートを使って高速な高機能サーバを書く方法

    « C++ テンプレートで(いまさら)FizzBuzz | メイン | データベースの差分バックアップとウェブサービスのお引っ越し » 2008年04月18日 C++ テンプレートを使って高速な高機能サーバを書く方法 「C++ のメンバ関数ポインタって何のためにあるの」という質問を耳にすることがあります。実際は、たとえばステートマシンを書くのに便利なのですが、ちょうどサイボウズ・ラボの C++ 熱が盛り上がっていることもあり、昔の作ったサーバフレームワークを再実装してみました。ちなみにもともとは、1990年代に東京大学駒場キャンパスで使われていた friends というサービスのバックエンドだった、finger プロキシ用に書いたコードです。ソースコードは /lang/cplusplus/friends_framework - CodeRepos::Share - Trac においてありま

    mogwaing
    mogwaing 2008/04/26
    あとで見る
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • Template::Toolkitでutf-8を扱う - Lism.in * blog - nekoya (id:studio-m)

    Perlutf-8って、何かと面倒くさいのね。前に使ってたのは5年ぐらい前に共用サーバでcgi書いてたぐらいだから全く把握してなかった。 まず判断が付かないのが、use utf8;した方がいいのかどうか。全部utf-8な環境では最初にuse utf8;しておくのが吉とdankogaiも言ってる。確かにマルチバイト文字列の長さを見たり、正規表現を通すには指定しておいた方がよさげ。でも、周りのライブラリがついてこなかったりして困る。 DBIで直接DBを叩いている古いスクリプトを移行したら、DBから取ってきたデータが文字化ける。DBIx::Classで取ってくるようにして、utf8_columns指定したら解決した。ただ、この状態でDB内のデータがどうなっているかとか、他のスクリプトとの連携がどうなるかは確認できていないので要調査。 DBからデータを拾ってくるのはよしとして、Template:

    Template::Toolkitでutf-8を扱う - Lism.in * blog - nekoya (id:studio-m)
  • メタ関数::テンプレート・メタプログラミング

    2006-06-30 昨日予告したように、今回からテンプレート・メタプログラミングに関する話題を取り上げていきたいと思います。C++のテンプレートは、元々は型 T のコンテナを実装する程度の用途しか想定されていなかったのでしょうが、STLやBoost C++ Librariesなどを見ても分かるように、非常に広い用途に利用されています。 今回は、テンプレート・メタプログラミングの最も基礎にあたる「メタ関数」を取り上げてみたいと思います。(メタではない)普通の関数は、引数として値を受け取り、返却値として値を返します。そして、関数として定義された内容は、実行時に解決されます。 しかし、メタ関数では、引数として型または定数値を受け取り、返却値として型または定数値を返します。そして、メタ関数として定義された内容は、コンパイル時に静的に解決されます。もちろん、メタ関数の引数や返却値というのは、普通の

    mogwaing
    mogwaing 2007/10/09
    template meta programming
  • Concepts Extending C++ Templates For Generic Programming

    この情報は恐ろしく昔のもので、現在のドラフト規格とまったくあっておりません。検索で飛んでこられた方は、この情報を信用せず、ご自分で規格をご確認ください。 これは最高にためになる動画だ。 コンセプトとは、C++のパラダイムのひとつ、ジェネリックプログラミングを、もっと分かりやすくするための文法だ。 前半の5分ほどは、ジェネリックプログラミングはなんであるかを解説している。 The reason we think that we can make it simpler is that many of the way people use template now are... tricks! There're complelcated tricks. You can't even read in the book in many faces. You have to dig for newsg

  • Fun With Templates: Part 1

  • Generic Programming Techniques

    Boost C++ Libraries ...one of the most highly regarded and expertly designed C++ library projects in the world. — Herb Sutter and Andrei Alexandrescu, C++ Coding Standards This is an incomplete survey of some of the generic programming techniques used in the boost libraries. Table of Contents Introduction The Anatomy of a Concept Traits Tag Dispatching Adaptors Type Generators Object Generators Po

  • [C++] ポリシクラス | bnezの日記 | スラド

    使用者が複数の対象に同一の操作を行う状況を考える。操作に対する振る舞いが対象によって異なっているとき、この性質を多態性(polymorphism)という。C++は、動的多態性(dynamic polymorphism)と静的多態性(static polymorphism)の2つを扱う能力を備える。ポリシクラスは、静的多態性の実装手段のひとつである。 動的多態性は、実行時に解決される多態性である。C++では仮想関数が主な実装手段である。以下に例を示す。 class Base { public: virtual ~Base() throw() {} virtual void func() = 0; }; class DerivedA : public Base { public: virtual void func() { std::cout << "DerivedA" << std::end

    mogwaing
    mogwaing 2007/07/27
    静的、動的polymorphism
  • テンプレートあれこれ (2) -- 特殊化 (specialization) - C++ Labyrinth

    テンプレートあれこれ (2) -- 特殊化 (specialization) 「特殊化」 (specialization) は、 テンプレートを使いこなす上で是非とも知っておきたい概念の一つである。 これの理解なくして STL などの正確な理解はありえない。 特殊化というのは、たとえて言うなら、テンプレートを「オーバーロード」するための仕組みである。 つまり、同一のテンプレート名に対して複数の異なる実装を定義することができるのである。 ただし、関数のオーバーロードとは異なり、テンプレート引数の数を変えることはできない。 テンプレートを特殊化するには、その前に汎用の (つまり普通の) テンプレートを定義 (または宣言) しておかなければならない。 以下に、汎用テンプレートの例を示す。 template<class T> class Buffer100 { private: T buffer[

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • ジェネリックプログラミング - Wikipedia

    ジェネリック(総称あるいは汎用)プログラミング(英: generic programming)は、具体的なデータ型に直接依存しない、抽象的かつ汎用的なコード記述を可能にするコンピュータプログラミング手法である。 ジェネリックプログラミングはデータ型でコードをインスタンス化するのか、あるいはデータ型をパラメータとして渡すかということにかかわらず、同じソースコードを利用できる[1]。ジェネリックプログラミングは言語により異なる形で実装されている。ジェネリックプログラミングの機能は1970年代にCLUやAdaのような言語に搭載され、次にBETA、C++、D、Eiffel、Java、その後DECのTrellis/Owl言語などの数多くのオブジェクトベース (object-based) およびオブジェクト指向 (object-oriented) 言語に採用された。 1995年の書籍デザインパターン[

    ジェネリックプログラミング - Wikipedia
  • 豆魂 - 技術記事-Java Generics 〜 C++ template との比較 〜

    This domain may be for sale!

  • 基底クラスをあとから作る方法

    移植性の高いプログラムの書き方 「基底クラスをあとから作る方法」編 しのはらのC++実験室トップページ 「移植性の高いプログラムの書き方」トップページ 異なる型をまとめて扱いたい C言語にはたくさんの型があります。構造体やクラスを作ればどんどん増えていきます。時には一つのプログラムで、異なる型のオブジェクトをまとめて管理したいこともあります。例えば、AppleクラスとBananaクラスとOrangeクラスがあって、それらのオブジェクトをまとめてlistに格納したいとします。普通は次のようなプログラムを書きます。 #include <list> class Fruit{ public: virtual const char* color()const=0; }; class Apple : public Fruit{ public: const char* color()const{ ret

  • 1