SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Template <Programming>
   ー テンプレートとは何か ー



                                高橋 晶(Akira Takahashi)
                       id:faith_and_brave / @cpp_akira
    2012/11/23 Effective C++読書会 vol.11 大阪~第7章特別編~
自己紹介
• Boost.勉強会 東京の主催者
• boostjp/cpprefjpサイトを作ってます
• 著書
  – 『C++テンプレートテクニック』
  – 『プログラミングの魔導書 Vol.1 ~Construct the World, C++~』
自己紹介
本日のお題
1.   テンプレート入門
2.   どんな場面で使用するか
3.   テンプレート技法
4.   未来
Chapter 01
テンプレート入門
Introduction to Templates
テンプレートとは何か
• 日本語では「雛形」
• 型のパラメータ化によってコードの共通化を行う
• 基本的な目的:
 – 任意のデータ型のオブジェクトを格納できるコンテナ
 – データ型に依存しないアルゴリズム
任意の型のオブジェクトを格納できるコンテナ
template <class T>
class List {
  T* data_;
  size_t size_;
public:
  void add(const T& x) {
    T* tmp = new T[size_ + 1];
    for (size_t i = 0; i < size_; ++i) { tmp[i] = data_[i]; }
    delete[] data_;

      data_ = tmp;
      data_[size_++] = x;
  }

  T& operator[](size_t i) { return data_[i]; }
   size_t size() const { return size_; }
};
任意の型のオブジェクトを格納できるコンテナ

List<int> ls;
ls.add(3);
ls.add(1);
ls.add(4);

for (size_t i = 0; i < ls.size(); ++i) {
  cout << ls[i] << endl;
}
                                           内部の型が異なるだけで
List<string> ls;                           使い方は同じ
ls.add("abc");
ls.add("hello");
ls.add("goodbye");

for (size_t i = 0; i < ls.size(); ++i) {
  cout << ls[i] << endl;
}
データ型に依存しないアルゴリズム

以下のmin()関数は、operator<持つあらゆる型に適用可能な関数


template <class T>
T min(T a, T b)
{
  return a < b ? a : b;
}

int    x = min(1, 2);     // Tはintに置き換えられる
double d = min(1.0, 2.0); // Tはdoubleに置き換えられる
char c = min('1', '1'); // Tはcharに置き換えられる
クラステンプレート
クラス内で扱う型をパラメータ化する
template <class T>
class X {
  // T型が内部で持っている型を取得する
  using value_type = typename T::value_type;

     void f(const T& x) {
       x.member(); // メンバ変数/関数を使用する
       T temp = T(); // パラメータ型のオブジェクトを構築する
     }
};

X<Y> object;
object.f(y_object);

※T()というコンストラクタ呼び出し構文を許可するために、intや
charのような組み込み型にもコンストラクタ構文が使えるようになっている
関数テンプレート
関数内で扱う型をパラメータ化する
template <class T>
void f(const T& x) {
  …同じく型Tのメンバや型を使用できる…
}

X x;
f(x); // オブジェクトxの型XでTが置き換えられる

Y y;
f<Y>(y); // 明示的な型指定も可能


クラステンプレートと違い、関数テンプレートの型は引数として
渡されたオブジェクトから推論される
可変引数テンプレート
任意個数のテンプレートパラメータを扱う機能(C++11)

void printValues() {}

template <class X, class... XS>
void printValues(X x, XS... xs) { // 先頭とそれ以外に分ける
  std::cout << x << std::endl;    // 先頭要素を出力
  printValues(xs...);             // 残りを出力
}

printValues(1, 'a', "hello");
テンプレートの特殊化
特殊化には、完全特殊化と部分特殊化の2種類がある
1.   完全特殊化は、汎用的なものとは別に、特定の型に対する特殊バー
     ジョンを定義する
2.   部分特殊化は、特定のパターンに一致する型に対する特殊バージョン
     を定義する
template <class T> // 汎用的な処理
struct X { void f() {} };

template <>
struct X<int> { void f() {} }; // intに対する完全特殊化

template <class T>
struct X<T*> { void f() {} }; // ポインタ型に対する部分特殊化
 完全特殊化はクラステンプレートと関数テンプレートで使用でき、
 部分特殊化はクラステンプレートで使用できる
デフォルトテンプレート引数
クラステンプレートと関数テンプレートには、それぞれデフォルト
の型を指定できる(関数テンプレートはC++11から)


template <class T = void>
class X;



template <class Option = nothing>
void f();
非型テンプレートパラメータ
テンプレートパラメータには、型だけでなく値も指定できる。
指定できるのは、整数型(int, char, enum, …)、および外部リンケージを持つ
オブジェクトへのポインタと参照。
template <size_t N>
class X {
  static constexpr int size = N;
  int ar[size];
}

X<3> x;
for (size_t i = 0; i < x.size; ++i)
  x.ar[i] …;
エイリアステンプレート
テンプレートを使用して型に別名を付ける(C++11から)
typedef templateとも言える


// アロケータだけ先に設定しておく
template <class T>
using vec = std::vector<T, stack_allocator<T>>;

vec<int> v;




※特殊化はできない
Chapter 02
どんな場面で使用するか
             Use Situations
テンプレートをどんな場面で使用するか

ここでは、テンプレートを使用するにあたっての指針を示す

テンプレートの適用場面は、大きく3つに分類できる:
1. 同じ意味論とインタフェースを持つ値を一様に扱う
2. クラス・関数の内部操作をコンパイル時に切り替える
3. 実行時エラーを阻止する
同じ意味論とインタフェース持つ値を
          一様に扱いたい場面で使用する
同じ意味を持つ操作に共通インタフェースを持たせて、同じよう
に扱う

class Title { void update(); void draw(); };
class Quest { void update(); void draw(); };

template <class Scene>
void updateGame(Scene& scene) {
  scene.update();
  scene.draw();
}
クラス・関数の内部操作をコンパイル時に切り替える

内部のアルゴリズムが違う以外は同じインタフェースで使える、
という場合に使用する。内部戦略のパラメータ化。
struct NonePolicy    { static void print(int x) {} };
struct PrintPolicy { static void print(int x) { /*標準出力へ*/ } };
struct LoggingPolicy { static void print(int x) { /*ファイルへ*/ } };

template <class OutputPolicy>
class X {
   int value_ = 0;
public:
   void f(int add) {
     value_ += add;
     OutputPolicy::print(value);
   }
};
実行時エラーを阻止する
場面によってやり方は様々だが、static assertのようなものと組み合わ
せることで、コンパイル時に正当性チェックを行う。
ここでは、strong typedefのためにテンプレートを使用する例を示す。
// タグ付き浮動小数点数型(タグが異なれば型が異なるので変換できなくなる)
template <class FloatingPoint, class Tag>
class tagged_real {
   FloatingPoint value_;
public:
   tagged_real(FloatingPoint value = 0) : value_(value) {}
   FloatingPoint& get() { return value_; }
};
struct degree {}; // 空クラス
struct radian {};
tagged_real<float, degree> deg(90.0f);
tagged_real<float, radian> rad = deg; // コンパイルエラー!型が違う
 https://github.com/faithandbrave/Shand/blob/master/libs/strong_typedef/tagged_real_example.cpp
いつでもテンプレート
• テンプレートは小難しい機能でライブラリを書く人だけ知って
  いればいい、というものではない
• テンプレートはとても広く一般的に使うもので、関数やクラス
  を書く際にいつでも設計の選択肢に入る
• 入門書の1章で紹介される程度には基本的:


          template <class T>
          T square(T x) { return x * x; }

          2乗を計算する基本な関数。テンプレートにして
          おけば、intでもdoubleでも、*演算子を持つあら
          ゆるクラスで使用できる
Chapter 03
テンプレート技法
    Template Techniques
テンプレート技法について
• 限られたルールの中で限界を超えるための必殺技がいくつ
  かある
• 紹介しきれないので、キーワードと概要の紹介にとどめる
• 詳細は、以下の文献を参照:
 –   『C++テンプレート完全ガイド(David Vandevoode)』
 –   『C++テンプレートメタプログラミング(Dave Abrahams』
 –   『C++テンプレートテクニック(επιστημη、高橋晶)』
 –   More C++ Idioms
 –   Boostのソースコード
 –   id:Cryolite, id:DigitalGhost, id:iorateのブログ
テンプレート技法各種
• SFINAE(Substitution Failure Is Not An Error)
   – テンプレートの置き換え失敗を、エラーではなくオーバーロードの候
     補から外す言語機能。コンパイル時に任意の条件でオーバーロード
     するのに使用する。「スフィネェ」と発音する。
• テンプレートメタプログラミング
   – テンプレートの各種機能を駆使して、コンパイル時のC++プログラムに
     関するメタ情報を操作する技法
• タグディスパッチ
   – タグと呼ばれる空クラスを駆使するオーバーロード技法
• 型消去(Type Erasure)
   – 一時的に型情報を消去してあらゆる型を包含し、元の型に関する情
     報を保持しておいて安全に復元して操作する技法
テンプレート技法各種
• 式テンプレート(Expression Template)
   – 式をその場では評価せずに式情報をテンプレートに保持しておき、演
     算が本当に必要になったときに評価する最適化技法
• CRTP(Curiously Recursive Template Pattern)
   – 自身の型を基本クラスのテンプレート引数として渡し、基本クラス内で
     派生クラスの情報を使用する技法
• ポリシーに基づく設計(Policy-based Design)
   – 単なる型ではなく、処理をテンプレートとして渡し、コンパイル時に戦
     略を切り替える設計手法
Chapter 05
         未来
       The Future
C++11の次
• C++11では、テンプレート関係で以下の機能が追加された:
 – エイリアステンプレート
 – 可変引数テンプレート
 – 関数テンプレートのデフォルトテンプレート引数
• 次期バージョンC++1yは、まだ何も決まっていない状態では
  あるが、考えられている機能をいくつか紹介する
非型テンプレートパラメータの制限緩和

constexprオブジェクトをテンプレートパラメータで受け取れるよ
うにしよう、というもの

struct C {
   constexpr C(int v) : v(v) { }
   int v;
};

template <C c>
struct X {
   int ar[c.v];
};


N3413 - Allowing arbitrary literal types for non-type template parameters
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3413.html
コンパイル時if文

static if宣言/文。テンプレートの特殊化やオーバーロード
ではなくif文で分岐する。

template <int n>
struct factorial {
   static if (n <= 1) {
     static constexpr value = 1;
   }
   else {
     static constexpr value = factorial<n - 1>::value * n;
   }
};


N3329 Proposal: static if declaration
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3329.pdf
2つしかなかった!
• せっかくなので関連情報。

• コンセプトはおそらくC++1yではなくC++22。Clangで実験的に
  実装されている。

• ほか、関数の戻り値型の推論強化など:
auto f(); // 宣言時点では、戻り値型は不明
auto f() { return 42; } // 戻り値型はint
   N3386 Return type deduction for normal functions
   http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
   GCC 4.8から-std=c++1yオプションを付けると使用できる
おわりに
• テンプレートは、共通コードをまとめるのに使用でき、
  重複コードを限りなく減らせます

• テンプレートの特殊化やオーバーロード技法を使用すること
  により、特定の条件で最適化をかけられます

• コンパイル時にプログラムを検証することで、実行をより安全
  に行えるようにできます

• テンプレートは多くの場面で適用できます。特定の型でのみ
  振る舞えればいいのか、汎用的なのかを常に考え、設計の
  選択肢を広げましょう。

Mais conteúdo relacionado

Mais procurados

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
C++入門?
C++入門?C++入門?
C++入門?tsudaa
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesShintarou Okada
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
 
C++ Template Metaprogramming
C++ Template MetaprogrammingC++ Template Metaprogramming
C++ Template MetaprogrammingAkira Takahashi
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語るAkira Takahashi
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Keisuke Fukuda
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#Fujio Kojima
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
 
知って得するC#
知って得するC#知って得するC#
知って得するC#Shota Baba
 
オブジェクト指向入門7
オブジェクト指向入門7オブジェクト指向入門7
オブジェクト指向入門7Kenta Hattori
 

Mais procurados (20)

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
C++入門?
C++入門?C++入門?
C++入門?
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
C++ Template Metaprogramming
C++ Template MetaprogrammingC++ Template Metaprogramming
C++ Template Metaprogramming
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語る
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#
 
Map
MapMap
Map
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 
Emcpp0506
Emcpp0506Emcpp0506
Emcpp0506
 
C#6.0の新機能紹介
C#6.0の新機能紹介C#6.0の新機能紹介
C#6.0の新機能紹介
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 
オブジェクト指向入門7
オブジェクト指向入門7オブジェクト指向入門7
オブジェクト指向入門7
 

Destaque

C++0x Variadic Type List
C++0x Variadic Type ListC++0x Variadic Type List
C++0x Variadic Type ListAkira Takahashi
 
La cuestión del presupuesto nacional para educación 2013
La cuestión del presupuesto nacional para educación 2013La cuestión del presupuesto nacional para educación 2013
La cuestión del presupuesto nacional para educación 2013Laura Marrone
 
Using Web Analytics Insights To Sell More
Using Web Analytics Insights To Sell MoreUsing Web Analytics Insights To Sell More
Using Web Analytics Insights To Sell MoreDennis Mortensen
 
9845312548-Dashboard-Guide
9845312548-Dashboard-Guide9845312548-Dashboard-Guide
9845312548-Dashboard-GuideAdam Corum
 
Social Media for Atlantic Canada Marketing
Social Media for Atlantic Canada MarketingSocial Media for Atlantic Canada Marketing
Social Media for Atlantic Canada MarketingMediaBadger
 
Laura's_Cardona_ Portfolio2015
Laura's_Cardona_ Portfolio2015Laura's_Cardona_ Portfolio2015
Laura's_Cardona_ Portfolio2015Laura Cardona
 
Making Connections : A talk on mobile engagement for UNICEF Japan
Making Connections : A talk on mobile engagement for UNICEF JapanMaking Connections : A talk on mobile engagement for UNICEF Japan
Making Connections : A talk on mobile engagement for UNICEF JapanYounghee Jung
 
Steve Rice Los Gatos: Financial Tips For Recent College Graduates
Steve Rice Los Gatos: Financial Tips For Recent College GraduatesSteve Rice Los Gatos: Financial Tips For Recent College Graduates
Steve Rice Los Gatos: Financial Tips For Recent College GraduatesSteve Rice Los Gatos
 
Magnetismo2 3
Magnetismo2 3Magnetismo2 3
Magnetismo2 3clausgon
 
Market research analysis 2
Market research analysis 2Market research analysis 2
Market research analysis 2mcgowanjhhs1
 
Tandoori chicken
Tandoori chickenTandoori chicken
Tandoori chickenDLSU-CEFIW
 
Global agriculture market drivers and outlook 2014
Global agriculture market drivers and outlook 2014   Global agriculture market drivers and outlook 2014
Global agriculture market drivers and outlook 2014 ipga
 
Ubuntu migration at Zaragoza City Council v3
Ubuntu migration at Zaragoza City Council v3Ubuntu migration at Zaragoza City Council v3
Ubuntu migration at Zaragoza City Council v3Eduardo Romero Moreno
 
How to succeed at hiring without really trying
How to succeed at hiring without really tryingHow to succeed at hiring without really trying
How to succeed at hiring without really tryingMelinda Seckington
 

Destaque (20)

C++0x Variadic Type List
C++0x Variadic Type ListC++0x Variadic Type List
C++0x Variadic Type List
 
C++1z draft
C++1z draftC++1z draft
C++1z draft
 
La cuestión del presupuesto nacional para educación 2013
La cuestión del presupuesto nacional para educación 2013La cuestión del presupuesto nacional para educación 2013
La cuestión del presupuesto nacional para educación 2013
 
Using Web Analytics Insights To Sell More
Using Web Analytics Insights To Sell MoreUsing Web Analytics Insights To Sell More
Using Web Analytics Insights To Sell More
 
9845312548-Dashboard-Guide
9845312548-Dashboard-Guide9845312548-Dashboard-Guide
9845312548-Dashboard-Guide
 
Social Media for Atlantic Canada Marketing
Social Media for Atlantic Canada MarketingSocial Media for Atlantic Canada Marketing
Social Media for Atlantic Canada Marketing
 
Laura's_Cardona_ Portfolio2015
Laura's_Cardona_ Portfolio2015Laura's_Cardona_ Portfolio2015
Laura's_Cardona_ Portfolio2015
 
Календари портфолио
Календари портфолиоКалендари портфолио
Календари портфолио
 
Making Connections : A talk on mobile engagement for UNICEF Japan
Making Connections : A talk on mobile engagement for UNICEF JapanMaking Connections : A talk on mobile engagement for UNICEF Japan
Making Connections : A talk on mobile engagement for UNICEF Japan
 
Steve Rice Los Gatos: Financial Tips For Recent College Graduates
Steve Rice Los Gatos: Financial Tips For Recent College GraduatesSteve Rice Los Gatos: Financial Tips For Recent College Graduates
Steve Rice Los Gatos: Financial Tips For Recent College Graduates
 
Magnetismo2 3
Magnetismo2 3Magnetismo2 3
Magnetismo2 3
 
Market research analysis 2
Market research analysis 2Market research analysis 2
Market research analysis 2
 
Задачі
ЗадачіЗадачі
Задачі
 
Cross references
Cross referencesCross references
Cross references
 
Tandoori chicken
Tandoori chickenTandoori chicken
Tandoori chicken
 
CV 2015
CV 2015CV 2015
CV 2015
 
Global agriculture market drivers and outlook 2014
Global agriculture market drivers and outlook 2014   Global agriculture market drivers and outlook 2014
Global agriculture market drivers and outlook 2014
 
Sustainia
SustainiaSustainia
Sustainia
 
Ubuntu migration at Zaragoza City Council v3
Ubuntu migration at Zaragoza City Council v3Ubuntu migration at Zaragoza City Council v3
Ubuntu migration at Zaragoza City Council v3
 
How to succeed at hiring without really trying
How to succeed at hiring without really tryingHow to succeed at hiring without really trying
How to succeed at hiring without really trying
 

Semelhante a What is template

Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_finalCryolite
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryAkira Takahashi
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweightgintenlabo
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)Hiro H.
 
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...Masahiro Sakai
 
研究生のためのC++ no.4
研究生のためのC++ no.4研究生のためのC++ no.4
研究生のためのC++ no.4Tomohiro Namba
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
C++ lecture-0
C++ lecture-0C++ lecture-0
C++ lecture-0sunaemon
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~Fujio Kojima
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ ExtensionsKouji Matsui
 
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターンTaisuke Oe
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)Masahiro Hayashi
 

Semelhante a What is template (20)

Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_final
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.Geomtry
 
C++0x concept
C++0x conceptC++0x concept
C++0x concept
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweight
 
Xtext 紹介
Xtext 紹介Xtext 紹介
Xtext 紹介
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
 
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
 
Boost Fusion Library
Boost Fusion LibraryBoost Fusion Library
Boost Fusion Library
 
研究生のためのC++ no.4
研究生のためのC++ no.4研究生のためのC++ no.4
研究生のためのC++ no.4
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
C++ lecture-0
C++ lecture-0C++ lecture-0
C++ lecture-0
 
C# 8
C# 8C# 8
C# 8
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ Extensions
 
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 

Mais de Akira Takahashi (20)

Cpp20 overview language features
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
 
Cppmix 02
Cppmix 02Cppmix 02
Cppmix 02
 
Cppmix 01
Cppmix 01Cppmix 01
Cppmix 01
 
Modern C++ Learning
Modern C++ LearningModern C++ Learning
Modern C++ Learning
 
cpprefjp documentation
cpprefjp documentationcpprefjp documentation
cpprefjp documentation
 
Boost tour 1_61_0 merge
Boost tour 1_61_0 mergeBoost tour 1_61_0 merge
Boost tour 1_61_0 merge
 
Boost tour 1_61_0
Boost tour 1_61_0Boost tour 1_61_0
Boost tour 1_61_0
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
Boost tour 1.60.0
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0
 
Boost container feature
Boost container featureBoost container feature
Boost container feature
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
Boost Tour 1_58_0
Boost Tour 1_58_0Boost Tour 1_58_0
Boost Tour 1_58_0
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
C++14 enum hash
C++14 enum hashC++14 enum hash
C++14 enum hash
 
Multi paradigm design
Multi paradigm designMulti paradigm design
Multi paradigm design
 
Start Concurrent
Start ConcurrentStart Concurrent
Start Concurrent
 
Programmer mind
Programmer mindProgrammer mind
Programmer mind
 
Boost.Study 14 Opening
Boost.Study 14 OpeningBoost.Study 14 Opening
Boost.Study 14 Opening
 
Executors and schedulers
Executors and schedulersExecutors and schedulers
Executors and schedulers
 
Improvement future api
Improvement future apiImprovement future api
Improvement future api
 

What is template