SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Universal Referenceの
オーバーロードは避けよう
2015/06/17 EMC++勉強会
西村 章宏 @Regenschauer490
概要
• 汎用的で効率面で無駄のない関数を実現するには、
universal referenceが便利
• 後から特殊化された処理を加えようとして、関数
オーバーロードを行うと思わぬ落とし穴
• Perfect forwarding なコンストラクタが基底クラスに
ある場合、継承時に思わぬ落とし穴
例:フリー関数
• 引数に文字列を渡したい場合
– 名前を引数に取り、ログを追加する関数を考える
• 単純に考えると、次の様な関数が思い浮かぶ
• このコードは悪くはないが、効率的ではない
std::multiset<std::string> names;
void logAndAdd( const std::string& name)
{
…
names.emplace(name);
}
例:フリー関数
– 呼び出し側で渡される文字列の型は3種類考えられる
1. lvalue std::string
2. rvalue std::string
3. 文字列リテラル
std::string petName(“Darla”);
logAndAdd( petName ); // 1
logAndAdd( std::string(“Persephone”) ); // 2
logAndAdd( “Patty Dog” ); // 3
例:フリー関数
– ログ(names)に渡されるまでの過程
1. lvalue std::string
① petNameを作成
② nameをpetNameにバインド (非コピー)
③ namesにnameが渡され、内部でコピー
std::string petName(“Darla”);
logAndAdd( petName );
void logAndAdd( const std::string& name)
{
…
names.emplace(name);
}
例:フリー関数
– ログ(names)に渡されるまでの過程
2. rvalue std::string
① 一時的なstd::stringを作成
② nameを一時変数にバインド (非コピー)
③ namesにnameが渡され、内部でコピーされる
 name自体はlvalueなのでmoveされない
logAndAdd( std::string(“Persephone”) );
void logAndAdd( const std::string& name)
{
…
names.emplace(name);
}
例:フリー関数
– ログ(names)に渡されるまでの過程
3. 文字列リテラル
① nameを”Pretty Dog”にバインドする際、暗黙的に
一時的なstd::stringを作成
② namesにnameが渡され、内部でコピーされる
 name自体はlvalueなのでmoveされない
logAndAdd( “Patty Dog” );
void logAndAdd( const std::string& name)
{
…
names.emplace(name);
}
例:フリー関数
– logAndAdd関数の効率面での問題点
1. lvalue std::string : 特になし
2. rvalue std::string : moveできるのにコピーされている
3. 文字列リテラル : emplaceに文字列リテラルをそのまま
渡せるのに一時変数が作られ、それが
コピーされている
std::string petName(“Darla”);
logAndAdd( petName );
logAndAdd( std::string(“Persephone”) );
logAndAdd( “Patty Dog” );
void logAndAdd( const std::string& name)
{
…
names.emplace(name);
}
例:フリー関数
– universal referenceを使えば解決できるかも!
1. lvalue std::string : 変更前と同じ (T&& -> std::string&)
2. rvalue std::string : perfect forwarding (T -> std::string)
3. 文字列リテラル : 文字列リテラルのままemplaceに渡さ
れる (T&& -> const char (&)[10] )
std::string petName(“Darla”);
logAndAdd( petName );
logAndAdd( std::string(“Persephone”) );
logAndAdd( “Patty Dog” );
template <typename T>
void logAndAdd( T&& name)
{
…
names.emplace(std::forward<T>(name));
}
Universal Referenceで解決
– 解決ゥ! 第26章完!
– …もし別の型でログを追加する必要が生じた場合
• indexを引数に取り、対応する名前を検索してログを追加する
関数を想定
• int型を引数に取るオーバーロードを定義
void logAndAdd(int idx)
{
…
names.emplace( nameFromIndex(idx) );
}
Universal Referenceとオーバーロード
– 意図通りのオーバーロード解決にはならない
• short型変数からは、T&&の関数が呼び出されてしまう
• T&&の関数内で、emplaceはshort型に対するオーバー
ロードは存在しないのでエラーとなる
std::string petName(“Darla”);
short nameIdx;
logAndAdd( petName ); // invoke T&& overload
logAndAdd( std::string(“Persephone”) ); // invoke T&& overload
logAndAdd( “Patty Dog” ); // invoke T&& overload
logAndAdd( 22 ); // call int overload
logAndAdd( nameIdx ); // error!
オーバーロード解決
• 原則として、引数が最もマッチする関数が選択される
 大まかな優先順位は以下の通り
1. 非関数templateで、引数が最もマッチする関数
2. 関数templateで、template argument deductionにより
1と同じシグネチャになる関数
3. 暗黙的変換を行うとマッチする関数
(変換の種類の中にも3段階の優先順位あり)
オーバーロード解決
– 例
void f(short v); // 優先順位1 (非template, 無変換)
template <class T>
void f(T& v); // 優先順位2 (template, 無変換)
void f(short const& a); // 優先順位3 (非template, qualification conversion)
template <class T>
void f(T const& v); // 優先順位4 (template, qualification conversion)
void f(int v); // 優先順位5 (非template , integral promotion)
void f(double v); // 優先順位6 (非template, floating-integral conversion)
int main(){
short a = 1;
f(a);
}
例:コンストラクタ
• logAndAdd関数に似た機能をコンストラクタで実装したい
– perfect forwarding なコンストラクタを考える
• 一見、コンストラクタは2種類しか存在しないように見える
• templateコンストラクタは、コピー・ムーブコンストラクタの
自動生成の妨げとはならない
class Person
{
template<typename T>
explicit Person( T&& name );
explicit Person( int idx );
}
例:コンストラクタ
– perfect forwarding なコンストラクタを考える
• コピー・ムーブコンストラクタが自動生成される
• 下記4種類の中からオーバーロード解決が行われる
class Person
{
template<typename T>
explicit Person( T&& name );
explicit Person( int idx );
Person( const Person& rhs );
Person( Person&& rhs );
};
例:コンストラクタ
– フリー関数の場合と同様、意図通りには動かない
• 下例ではコピーコンストラクタが呼ばれて欲しいが…
• この例では、T&& はインスタンス化されると Person& となる
• pは非const修飾であるため、コピーコンストラクタのシグネ
チャとマッチするためにはqualification conversionが必要
• よって、変換が不要なT&&の方が優先順位は高くなる
Person p(“Nancy”); // invoke T&& ctor
auto cloneOfp(p); // invoke T&& ctor ( not copy ctor )
※const Person p(“Nancy”); と定義すると、copy ctorが呼ばれる
例:コンストラクタ
– 継承が絡んでくると更に酷いことに
• rhsは “SpecialPerson”型なので、PersonクラスのT&&は
– copy ctor (上): T&& -> const SpecialPerson&
– move ctor (下): T&& -> SpecialPerson&&
• SpecialPerson& から Person& へは reference conversion が必要
class SpecialPerson : public Person
{
SpecialPerson( const SpecialPerson& rhs)
: Person(rhs); // calls Person’s T&& ctor
SpecialPerson( SpecialPerson&& rhs)
: Person(std::move(rhs)); // calls Person’s T&& ctor
};
教訓
• Universal referenceはインスタンス化されると
ほとんど全ての型(+修飾子)を表現できる
Item24参照
例外はItem30で説明
• オーバーロード解決では、 我々が予想する以上に
universal referenceの方を呼び出されることが多い
• Perfect forwarding なコンストラクタは特に問題があり、
もし基底クラスに存在すれば基底クラスのコピー・ムーブ
コンストラクタを乗っ取ってしまう

Más contenido relacionado

La actualidad más candente

「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界maruyama097
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Takashi Hoshino
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)Yuki Tamura
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料SECCON Beginners
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Mitsuru Kariya
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCamlHaruka Oikawa
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装Ryoma Sin'ya
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたMITSUNARI Shigeo
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Fixstars Corporation
 

La actualidad más candente (20)

「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
 
Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 

Destacado

Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Keisuke Fukuda
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Keisuke Fukuda
 
Effective Modern C++ study group Item39
Effective Modern C++ study group Item39Effective Modern C++ study group Item39
Effective Modern C++ study group Item39Takatoshi Kondo
 
Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)Keisuke Fukuda
 
Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25Takashi Hoshino
 
Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38Takashi Hoshino
 
Effective Modern C++ Item 24: Distinguish universal references from rvalue re...
Effective Modern C++ Item 24: Distinguish universal references from rvalue re...Effective Modern C++ Item 24: Distinguish universal references from rvalue re...
Effective Modern C++ Item 24: Distinguish universal references from rvalue re...mooopan
 
Overview of the .Net Collection Framework and Immutable Collections
Overview of the .Net Collection Framework and Immutable CollectionsOverview of the .Net Collection Framework and Immutable Collections
Overview of the .Net Collection Framework and Immutable CollectionsYoshifumi Kawai
 
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Ryo Igarashi
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Keisuke Fukuda
 

Destacado (16)

Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
Effective Modern C++ study group Item39
Effective Modern C++ study group Item39Effective Modern C++ study group Item39
Effective Modern C++ study group Item39
 
Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)
 
Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25
 
Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38
 
Effective Modern C++ Item 24: Distinguish universal references from rvalue re...
Effective Modern C++ Item 24: Distinguish universal references from rvalue re...Effective Modern C++ Item 24: Distinguish universal references from rvalue re...
Effective Modern C++ Item 24: Distinguish universal references from rvalue re...
 
Overview of the .Net Collection Framework and Immutable Collections
Overview of the .Net Collection Framework and Immutable CollectionsOverview of the .Net Collection Framework and Immutable Collections
Overview of the .Net Collection Framework and Immutable Collections
 
Emcjp item33,34
Emcjp item33,34Emcjp item33,34
Emcjp item33,34
 
emcjp Item 42
emcjp Item 42emcjp Item 42
emcjp Item 42
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
Emcpp item31
Emcpp item31Emcpp item31
Emcpp item31
 
Emcpp item41
Emcpp item41Emcpp item41
Emcpp item41
 
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 

Similar a Effective Modern C++ 勉強会 Item26

研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
Java8 lambdas chapter1_2
Java8 lambdas chapter1_2Java8 lambdas chapter1_2
Java8 lambdas chapter1_2yo0824
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
C#coding guideline その2_20130325
C#coding guideline その2_20130325C#coding guideline その2_20130325
C#coding guideline その2_20130325Yoshihisa Ozaki
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出Shuyo Nakatani
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
Functional Programming in Swift
Functional Programming in SwiftFunctional Programming in Swift
Functional Programming in SwiftKaz Yoshikawa
 
安全なプログラムの作り方
安全なプログラムの作り方安全なプログラムの作り方
安全なプログラムの作り方Kazuhiro Nishiyama
 
Python勉強会1-はじめに
Python勉強会1-はじめにPython勉強会1-はじめに
Python勉強会1-はじめに理 小林
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
A Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleA Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleKoji Matsuda
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門masatora atarashi
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crfShuyo Nakatani
 
Polyphony の並列化
Polyphony の並列化Polyphony の並列化
Polyphony の並列化ryos36
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方Sho Shimauchi
 

Similar a Effective Modern C++ 勉強会 Item26 (20)

What is template
What is templateWhat is template
What is template
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Java8 lambdas chapter1_2
Java8 lambdas chapter1_2Java8 lambdas chapter1_2
Java8 lambdas chapter1_2
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
C#coding guideline その2_20130325
C#coding guideline その2_20130325C#coding guideline その2_20130325
C#coding guideline その2_20130325
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
Functional Programming in Swift
Functional Programming in SwiftFunctional Programming in Swift
Functional Programming in Swift
 
安全なプログラムの作り方
安全なプログラムの作り方安全なプログラムの作り方
安全なプログラムの作り方
 
Tr18015
Tr18015Tr18015
Tr18015
 
Python勉強会1-はじめに
Python勉強会1-はじめにPython勉強会1-はじめに
Python勉強会1-はじめに
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
A Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleA Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by Example
 
Tdd
TddTdd
Tdd
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crf
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Polyphony の並列化
Polyphony の並列化Polyphony の並列化
Polyphony の並列化
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方
 

Effective Modern C++ 勉強会 Item26