Page MenuHomec4science

week9.html
No OneTemporary

File Metadata

Created
Wed, Aug 28, 06:19

week9.html

This file is larger than 256 KB, so syntax highlighting was skipped.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<title>talk slides</title>
<!-- Loading the init_reveal macro -->
<!-- Load and configure reveal -->
<script src="js-markdown-extra.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<!-- General and theme style sheets -->
<link rel="stylesheet" href="reveal.js/css/reveal.css">
<link rel="stylesheet" href="reveal.js/css/theme/simple.css" id="theme">
<!-- Loading the mathjax macro -->
<!-- Load mathjax -->
<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
<!-- MathJax configuration -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true,
processEnvironments: true
},
// Center justify equations in code and markdown cells. Elsewhere
// we use CSS to left justify single line equations in code cells.
displayAlign: 'center',
"HTML-CSS": {
styles: {'.MathJax_Display': {"margin": 0}},
linebreaks: { automatic: true }
}
});
</script>
<!-- End of mathjax configuration -->
<!-- Get Font-awesome from cdn -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.css">
<!-- End of reveal parts -->
<style type="text/css">
.reveal {
font-size: 16px;
}
.reveal h1 {
font-size: 200%;
}
.reveal h2 {
font-size: 150%;
}
.text_cell_render {
text-align: left;
}
a.anchor-link:link {
text-decoration: none;
visibility: hidden;
}
.slide {
}
div.slide{
border-style: solid;
border-width: 2px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
margin-top: 5px;
margin-bottom: 5px;
padding: 100px;
width: 1000px;
}
/*******************************
** highing tpart
*******************************/
.highlight_text {
color: blue;
}
.highlight-base {
color: #000;
}
.highlight-variable {
color: #000;
}
.highlight-variable-2 {
color: #1a1a1a;
}
.highlight-variable-3 {
color: #333333;
}
.highlight-string {
color: #BA2121;
}
.highlight-comment {
color: #408080;
font-style: italic;
}
.highlight-number {
color: #080;
}
.highlight-atom {
color: #88F;
}
.highlight-keyword {
color: #008000;
font-weight: bold;
}
.highlight-builtin {
color: #008000;
}
.highlight-error {
color: #f00;
}
.highlight-operator {
color: #AA22FF;
font-weight: bold;
}
.highlight-meta {
color: #AA22FF;
}
.highlight-def {
color: #00f;
}
.highlight-string-2 {
color: #f50;
}
.highlight-qualifier {
color: #555;
}
.highlight-bracket {
color: #997;
}
.highlight-tag {
color: #170;
}
.highlight-attribute {
color: #00c;
}
.highlight-header {
color: blue;
}
.highlight-quote {
color: #090;
}
.highlight-link {
color: #00c;
}
.highlight .hll { background-color: #ffffcc }
//.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="--git-pull-upstream-master--"><center> <span style="color:red"> git pull upstream master </span> </center><a class="anchor-link" href="#--git-pull-upstream-master--">&#182;</a></h1>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1><center> Answer questions from <br> the previous session</center></h1>
</div>
</div></div>
</section></section><section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Why-optimization-?">Why optimization ?<a class="anchor-link" href="#Why-optimization-?">&#182;</a></h1><p><a href="https://www.youtube.com/watch?v=nXaxk27zwlk">Chandler Carruth talk @ CppCon 2015</a></p>
<video controls>
<source src="cppcon-optim.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
</div></div>
</section></section><section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Algorithmic-ideas">Algorithmic ideas<a class="anchor-link" href="#Algorithmic-ideas">&#182;</a></h1>
</div>
</div><div class="fragment" style="width: 100%;float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<ul>
<li>Complexity: quantifies the computation needs</li>
<li>How to multiply two numbers a and b: a * 111 <ul>
<li>$\underbrace{a + a + ... + a}_{111~times}$</li>
</ul>
</li>
</ul>
</div>
</div></div><div class="fragment" style="width: 100%;float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<ul>
<li>Multiplication strategy learned at school: $a \cdot 100 + a \cdot 10 + a \cdot 1$</li>
<li>In binary: $$4 \cdot 3 = 100 \cdot 11 = 100 &lt;&lt; 1 + 100 &lt;&lt; 0 = 1000 + 100 = 1100 = 2^3 + 2^2 = 8 + 4 = 12$$</li>
</ul>
</div>
</div></div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<ul>
<li><p>The efficiency of an algorithm is much more important than the technology/harware used to execute it.</p>
<ul>
<li>Exemple of series $\sum_k^N k = N(N+1)/2$</li>
<li>The complexity of the naive algorithm to compute a N-body problem is $O(N^2)$</li>
</ul>
</li>
</ul>
</div>
</div></div>
</section></section><section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Code-optimization">Code optimization<a class="anchor-link" href="#Code-optimization">&#182;</a></h1>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Compiler-optimization-option">Compiler optimization option<a class="anchor-link" href="#Compiler-optimization-option">&#182;</a></h1><ul>
<li>In order to ask the compiler, one should ask for compilation with optimization.</li>
</ul>
<div class="highlight"><pre><span></span>gcc -c file.cc -O3
</pre></div>
<ul>
<li>while for debugging the compiler should be required to attach debugging symbols</li>
</ul>
<div class="highlight"><pre><span></span>gcc -c file.cc -g
</pre></div>
<p>In CLion, you can get this option with the Configuration menu in the CMake settings.</p>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Let's try this:</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">foo</span><span class="p">(</span><span class="k">const</span> <span class="kt">int</span> <span class="o">&amp;</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">18</span><span class="p">;</span> <span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">long</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">1000000000</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="n">res</span> <span class="o">+=</span> <span class="n">i</span> <span class="o">+</span> <span class="n">foo</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&quot;Hello, World! &quot;</span> <span class="o">&lt;&lt;</span> <span class="n">res</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="GNU-profiler">GNU profiler<a class="anchor-link" href="#GNU-profiler">&#182;</a></h1><p>There are several tools to profile a code which aims at helping the optimization process.</p>
<ul>
<li>The GNU profiler: gprof. You need to compile the sources with an option to GCC.</li>
</ul>
<div class="highlight"><pre><span></span>g++ -c -pg file.cc -g
g++ -pg -o program_name file.o
</pre></div>
</div>
</div><div class="fragment" style="width: 100%;float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>To use it in CLion, you should add the following in your CMakeLists.txt</p>
<div class="highlight"><pre><span></span><span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_CXX_FLAGS</span> <span class="s2">&quot;-pg&quot;</span><span class="p">)</span>
<span class="nb">set</span><span class="p">(</span><span class="s">SOURCE_FILES</span> <span class="s">main.cpp</span> <span class="s">test.cpp</span><span class="p">)</span>
</pre></div>
</div>
</div></div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Then you launch your program normally and
a file gmon.out will be produced which can be analysed with the program <em>gprof</em>.</p>
<div class="highlight"><pre><span></span>gprof PROGRAM_NAME gmon.out
</pre></div>
<p>For a line by line information you can use:</p>
<div class="highlight"><pre><span></span>gprof -l PROGRAM_NAME gmon.out
</pre></div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Valgrind-&amp;-Cachegrind">Valgrind &amp; Cachegrind<a class="anchor-link" href="#Valgrind-&amp;-Cachegrind">&#182;</a></h1><ul>
<li>Valgrind: running your program through valgrind can allow to profile the call graph</li>
</ul>
<div class="highlight"><pre><span></span>valgrind --tool<span class="o">=</span>callgrind PROGRAM_NAME arguments
</pre></div>
<ul>
<li>A file is created: <em>callgrind.out.pid</em> </li>
<li>It can be analyzed with kcachegrind (only under Unix-like OS, sorry).</li>
</ul>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Perf-Tool"><a href="https://perf.wiki.kernel.org/index.php/Main_Page">Perf Tool</a><a class="anchor-link" href="#Perf-Tool">&#182;</a></h1><ul>
<li>Instruments CPU performance counters</li>
<li>Lightweight profiling</li>
<li>Included in the Linux kernel, under tools/perf</li>
<li>Frequently updated and enhanced </li>
</ul>
<div class="highlight"><pre><span></span>perf record -g program
perf report -G
</pre></div>
<p><a href="https://www.youtube.com/watch?v=nXaxk27zwlk">Chandler Carruth talk @ CppCon 2015</a></p>
</div>
</div></div>
</section></section><section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="C/C++:-code-optimization">C/C++: code optimization<a class="anchor-link" href="#C/C++:-code-optimization">&#182;</a></h1><p>Presenting the basic rules to get optimization on standard CPUs</p>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="What-is-a-function-call-?">What is a function call ?<a class="anchor-link" href="#What-is-a-function-call-?">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kt">double</span> <span class="nf">foo</span><span class="p">(</span><span class="k">const</span> <span class="kt">int</span> <span class="o">&amp;</span><span class="n">a</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="mf">1.5</span><span class="p">;</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="fragment" style="width: 100%;float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="At-the-assembly-level-=&gt;-overhead">At the assembly level =&gt; overhead<a class="anchor-link" href="#At-the-assembly-level-=&gt;-overhead">&#182;</a></h2><ul>
<li>Saving the context</li>
<li>Copying the arguments</li>
<li>jump to another block of instruction (GO TO)</li>
<li>copy the result</li>
<li>restore context</li>
</ul>
</div>
</div></div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Inline-functions">Inline functions<a class="anchor-link" href="#Inline-functions">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kr">inline</span> <span class="kt">double</span> <span class="nf">foo</span><span class="p">(</span><span class="k">const</span> <span class="kt">int</span> <span class="o">&amp;</span><span class="n">a</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="mf">1.5</span><span class="p">;</span> <span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">sz</span> <span class="o">=</span> <span class="mi">1000000</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">res</span><span class="p">;</span>
<span class="n">res</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">sz</span><span class="p">);</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">sz</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// since it is inlined there is no actual function call</span>
<span class="n">res</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">foo</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Virtual-table-and-calls">Virtual table and calls<a class="anchor-link" href="#Virtual-table-and-calls">&#182;</a></h1><ul>
<li>Virtual table (virtual method table, virtual function table, virtual call table,
dispatch table, or vtable, VMT or Vtable)</li>
<li>Mechanism supporting dynamic dispatch (or run-time method binding)</li>
<li>Compilers add a hidden pointer to the virtual method to call table</li>
<li>Concretely a VMT is an array of pointers to (virtual) functions</li>
</ul>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Consider the following:</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">struct</span> <span class="n">ComputeInterface</span> <span class="p">{</span>
<span class="k">virtual</span> <span class="kt">double</span> <span class="n">compute</span><span class="p">()</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">struct</span> <span class="nl">A</span> <span class="p">:</span> <span class="k">public</span> <span class="n">ComputeInterface</span> <span class="p">{</span>
<span class="k">virtual</span> <span class="kt">double</span> <span class="n">compute</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">M_PI</span><span class="p">;</span> <span class="p">};</span>
<span class="p">};</span>
<span class="k">struct</span> <span class="nl">B</span> <span class="p">:</span> <span class="k">public</span> <span class="n">ComputeInterface</span> <span class="p">{</span>
<span class="k">virtual</span> <span class="kt">double</span> <span class="n">compute</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">M_E</span><span class="p">;</span> <span class="p">};</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea ">
<img alt="You cannot see the image with this browser/mailer" src="data:image/png;base64,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depU/Zx7eXmpq1evpuepBQAg3RBQAQCytC+//FLLkyePvnzkyBFp166dCg8PT9V+3nzzTXXp0iV92dPTUwYNGmQVIDVt2lQrUKCAvjxjxgybhvns3btXLV++XF8uV65clupBJSLy6aefSmhoaIrrffjhh8ryboc9e/a0mhA+4eTZtvRE+/7771P9uqakT58++s+xsbEyevRom4KBU6dOybx58+T+/fty//59qVu3bpq2y0x9+/bVf37w4IF89dVXNp2T9evXqy1btujnpH79+qYdg2VPSFsn7N+zZ4/asmVLiuv17t3bsGzLNRMbGyuzZs3SlwsUKCBlypTRl9u1a6dZzm/32Wef2RTahoeHy9dff62fc19fXylSpEg6nlkAANIPARUAIEvLnz+//PTTT4a6devWSYMGDZQtw/0iIyNl4MCBasqUKYb60aNHJzqxt4ODgwwePNiw/csvv6wCAwOTfI6LFy9Kp06dDLevHzFiRLrewSw9XLt2TTp37mwYBpnQTz/9pH7++Wd92d7eXoYMGWJ1oL6+voa677//Ptkv5Bs2bFDjx49/4rY/evQo0RChdu3ammWPocWLF8tnn32WbOBw584d6dKli4q/i6OmaTJ8+PCs9WKKJBk2dujQQStcuLC+/PXXX8tvv/2W7Dm5cOGCIdhyd3eX119/3bRzYjmcb8+ePSlO8n/8+HHp2LGj4T0aHR0tMTExVuvWqlVLq127tr68YcMGGTNmTLLn54svvlAnTpzQl3v06GG4c5+7u7v0799fXz579qz06NEj2UA2vseoZbD+5ptvmnG6AQBIEwRUAIAsr3v37trbb79tqDtw4IDUrFlTvfLKK2r+/Pnq4sWLeq+KkJAQ2b9/v3z55ZeqRIkSaurUqYZtW7duLW+++WaSX67feecdzXIempMnT0qlSpXU1KlTleVd+m7duiXfffedqlatmrp27ZpeX69ePXnttdeyXKAhIrJmzRqpWrWqWrx4sYoPOKKiomTr1q2qbdu2asSIEWI5z9a7774r/v7+VvupWLGiYcL5M2fOSPPmzVXCydgfPnwo48aNU23btpWoqCipUqWKTe1M2GNr8uTJcv36dbl9+7Zh+JeIyLRp0wxzmX300Ufy4osvqg0bNhiGiwYFBcnMmTNVtWrV1LFjx/T6IUOGGOYlyqwSnpMff/xR3bp1S27evCmW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L5mnp6c6efJkstt0795dJfdeuX37tliGQs7Ozuqff/5Jtq379+8Xd3d3QwCXVFBh+X4SeTx3WlLBtlJK3n//favXe+DAgUm2JzIyUgoVKmQIUhNbL+E8bSKi3N3dEw0ZLcvw4cMN21SqVCnR/WeWgGrr1q1WIfv9+/eTbcPMmTMN25QpUybJ99eff/751J97lr/bkjvm9CwhISGG3yGvvPJKqtrRrl07wzlL6fPgSQsBFYVCycqFOagAIBvp1q2bYXnZsmXJrn/8+HE5duyYvtyzZ09xcnJKk7Z4eXnJX3/9laF3JksLluejfPny0rBhwxSH51jOkaLU47AjI0yePFkp9f/zv4waNUpatGiRbHvfeOMNrX379inuOzIyUn799Vd9OXfu3DJr1izN0dExyW00TZOJEydqhQoV0usWLVokqZ1zKK15enrKjBkzEr3Lm+U6ixYt0iyv/yVLltg0B1lifvrpJ8O5W7RoUYpD2saMGaO9+OKL+vLWrVsl4ZCr1Jo3b56ynJfss88+E39//2S3+e677wyv8x9//GF4fObMmSoyMlJffu+996R+/frJXnfVq1eXjz76SF+OiYmRGTNm2DTX1rhx46yGpFlq37694bk9PT3l66+/TrI9Tk5O0rZtW305ODhYH56aki+++EIfQpfc+atUqZK+fPToUdm7d2+mmZMtIctr1dHRUZYsWaLlzp072W369eun9e3bV18+c+aMbNq0KdFj3L17t/5z5cqVn6iNlttZDknPSPHDX+O5u7unans3N7dk9wcAEAIqAMhO6tWrp1nOzbF8+XKxDDASWrRokeHBfv36pdlcKYMHDzb1duBPqmfPnvLVV1/JV199JZ9//rlN27i4uBiWM2piZMs5hdzd3eW9996z6fUbO3Zsiutt375d3blzR19+7bXXUrydenw7hg4dqi+HhYXJ2rVrTf1y/tprr4m3t3eK6/n7+0uvXr305YiICNm4cWOq23727FnZt2+fvjxkyBDJmzdvittpmiZjxowx1K1Zs+apzt38+fP1n3Pnzi22zI+WP39+w/x1lqGtiPG6c3FxEVvmb/rvPGg5c+bUl3///fcUt3F1dZVXXnkl2f0XKVLEsNyuXTvx8PBIdr9FixY1LNvyns2XL58MGjQoxWN1cHCQsWPHGurMntw7KcHBwbJq1Sp9uXv37lKqVCmbtv3o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" width="40%"/>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>If we manipulate objects with the mother class type e.g.:</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kt">double</span> <span class="nf">performCompute</span><span class="p">(</span><span class="n">ComputeInterface</span> <span class="o">&amp;</span><span class="n">compute</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">compute</span><span class="p">.</span><span class="n">compute</span><span class="p">();</span> <span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">A</span> <span class="n">a</span><span class="p">;</span>
<span class="n">performCompute</span><span class="p">(</span><span class="n">a</span><span class="p">);</span>
<span class="n">B</span> <span class="n">b</span><span class="p">;</span>
<span class="n">performCompute</span><span class="p">(</span><span class="n">b</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>With the virtual table:</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kt">double</span> <span class="nf">computeMethodA</span><span class="p">(</span><span class="n">ComputeInterface</span> <span class="o">*</span> <span class="n">_this</span><span class="p">){</span><span class="k">return</span> <span class="n">M_PI</span><span class="p">;};</span>
<span class="kt">double</span> <span class="nf">computeMethodB</span><span class="p">(</span><span class="n">ComputeInterface</span> <span class="o">*</span> <span class="n">_this</span><span class="p">){</span><span class="k">return</span> <span class="n">exp</span><span class="p">(</span><span class="mf">1.</span><span class="p">);};</span>
<span class="k">struct</span> <span class="n">ComputeInterface</span> <span class="p">{</span> <span class="n">FunctionPointer</span> <span class="n">computeMethodPtr</span><span class="p">;</span> <span class="p">};</span>
<span class="kt">double</span> <span class="nf">performCompute</span><span class="p">(</span><span class="n">ComputeInterface</span> <span class="o">*</span> <span class="n">compute</span><span class="p">){</span>
<span class="k">return</span> <span class="n">compute</span><span class="o">-&gt;</span><span class="n">computeMethodPtr</span><span class="p">(</span><span class="n">compute</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>With the following call</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">main</span><span class="p">(){</span>
<span class="n">ComputeInterface</span> <span class="n">a</span><span class="p">;</span>
<span class="n">a</span><span class="p">.</span><span class="n">computeMethodPtr</span> <span class="o">=</span> <span class="n">computeMethodA</span><span class="p">;</span> <span class="n">performCompute</span><span class="p">(</span><span class="o">&amp;</span><span class="n">a</span><span class="p">);</span>
<span class="n">ComputeInterface</span> <span class="n">b</span><span class="p">;</span>
<span class="n">b</span><span class="p">.</span><span class="n">computeMethodPtr</span> <span class="o">=</span> <span class="n">computeMethodB</span><span class="p">;</span> <span class="n">performCompute</span><span class="p">(</span><span class="o">&amp;</span><span class="n">b</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The most dramatic effect of virtual function calls is that it prevents (in most cases) the possibility to inline.</p>
<p>This should be avoided in the <strong>critical loops</strong></p>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="On-the-critical-loops">On the critical loops<a class="anchor-link" href="#On-the-critical-loops">&#182;</a></h2><p>Scientific codes have large loops $\Rightarrow$ The <strong>critical loops</strong></p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">a</span> <span class="o">&lt;</span> <span class="n">nb_atoms</span><span class="p">;</span> <span class="o">++</span><span class="n">a</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// do something for every atoms...</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<ul>
<li>When possible, decisions should be avoided in critical loops</li>
</ul>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">a</span> <span class="o">&lt;</span> <span class="n">nb_atoms</span><span class="p">;</span> <span class="o">++</span><span class="n">a</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">a</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// do something ...</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="c1">// do something else...</span>
<span class="p">}</span>
<span class="c1">// generate an execution flow divergence</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<ul>
<li>Virtual calls should also be avoided in critical loops</li>
</ul>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="About-memory-localization">About memory localization<a class="anchor-link" href="#About-memory-localization">&#182;</a></h1><ul>
<li>The processor reads memory by chunks: pre-fetch of information in <a href="https://en.wikipedia.org/wiki/CPU_cache">memory cache</a></li>
<li>Contiguous data access optimizes <em>cache fill</em> and avoids <a href="https://en.wikipedia.org/wiki/CPU_cache#Cache_miss">cache misses</a></li>
<li><strong>In general, ordered memory accesses are more efficient than random memory accesses</strong></li>
</ul>
</div>
</div></div>
</section></section><section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Templates">Templates<a class="anchor-link" href="#Templates">&#182;</a></h1>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Some-more-factorization-?">Some more factorization ?<a class="anchor-link" href="#Some-more-factorization-?">&#182;</a></h1><ul>
<li>Some algorithms are not <em>type dependent</em></li>
</ul>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea ">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">getMaximum</span><span class="p">(</span><span class="k">const</span> <span class="kt">int</span> <span class="o">&amp;</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">int</span> <span class="o">&amp;</span><span class="n">b</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">a</span> <span class="o">&gt;</span> <span class="n">b</span><span class="p">)</span>
<span class="k">return</span> <span class="n">a</span><span class="p">;</span>
<span class="k">return</span> <span class="n">b</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kt">double</span> <span class="nf">getMaximum</span><span class="p">(</span><span class="k">const</span> <span class="kt">double</span> <span class="o">&amp;</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="kt">double</span> <span class="o">&amp;</span><span class="n">b</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">a</span> <span class="o">&gt;</span> <span class="n">b</span><span class="p">)</span>
<span class="k">return</span> <span class="n">a</span><span class="p">;</span>
<span class="k">return</span> <span class="n">b</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Can-we-use-types-as-parameters-?">Can we use <strong>types</strong> as <strong>parameters</strong> ?<a class="anchor-link" href="#Can-we-use-types-as-parameters-?">&#182;</a></h2>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Template-Functions">Template Functions<a class="anchor-link" href="#Template-Functions">&#182;</a></h1>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span style="color:red;font-size:150%">template</span>&lt;typename T&gt;
T getMaximum(const T &amp; a, const T &amp; b) {
if (a &gt; b)
return a;
return b;
}
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span>template&lt;<span style="color:red;font-size:150%">typename T</span>&gt;
T getMaximum(const T &amp; a, const T &amp; b) {
if (a &gt; b)
return a;
return b;
}
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span>template&lt;typename <span style="color:red;font-size:150%">T</span>&gt;
<span style="color:red;font-size:150%">T</span> getMaximum(const <span style="color:red;font-size:150%">T</span> &amp; a, const <span style="color:red;font-size:150%">T</span> &amp; b) {
if (a &gt; b)
return a;
return b;
}
</pre></div>
</div>
</div>
</div>
</div><div class="fragment" style="width: 100%;float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Type-matching-!">Type matching !<a class="anchor-link" href="#Type-matching-!">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="kt">double</span> <span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">;</span>
<span class="kt">double</span> <span class="n">res_d</span> <span class="o">=</span> <span class="n">getMaximum</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>or</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="kt">int</span> <span class="n">c</span><span class="p">,</span><span class="n">d</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">res_i</span> <span class="o">=</span> <span class="n">getMaximum</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">d</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div></div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="-Apply-templates-to-a-vector-class-?-"><center> Apply templates to a vector class ? </center><a class="anchor-link" href="#-Apply-templates-to-a-vector-class-?-">&#182;</a></h1><p><br></p>
<h1 id="-Yes-"><center> Yes </center><a class="anchor-link" href="#-Yes-">&#182;</a></h1>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Template-Classes">Template Classes<a class="anchor-link" href="#Template-Classes">&#182;</a></h1>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span>template &lt;typename T&gt; <span style="color:red;font-size:150%">class MyVector</span> {
public:
T &amp;operator[](unsigned int dim) { return value[dim]; }
private:
T value[3];
};
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span style="color:red;font-size:150%">template</span> &lt;typename T&gt; class MyVector {
public:
T &amp;operator[](unsigned int dim) { return value[dim]; }
private:
T value[3];
};
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span>template &lt;<span style="color:red;font-size:150%">typename T</span>&gt; class MyVector {
public:
T &amp;operator[](unsigned int dim) { return value[dim]; }
private:
T value[3];
};
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span>template &lt;typename <span style="color:red;font-size:150%">T</span>&gt; class MyVector {
public:
<span style="color:red;font-size:150%">T</span> &amp;operator[](unsigned int dim) { return value[dim]; }
private:
<span style="color:red;font-size:150%">T</span> value[3];
};
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="o">&gt;</span> <span class="k">class</span> <span class="nc">MyVector</span> <span class="p">{</span>
<span class="k">public</span><span class="o">:</span>
<span class="n">T</span> <span class="o">&amp;</span><span class="k">operator</span><span class="p">[](</span><span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">dim</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">value</span><span class="p">[</span><span class="n">dim</span><span class="p">];</span> <span class="p">}</span>
<span class="k">private</span><span class="o">:</span>
<span class="n">T</span> <span class="n">value</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Template-Classes">Template Classes<a class="anchor-link" href="#Template-Classes">&#182;</a></h1><ul>
<li>MyVector is a templated class </li>
<li>Template parameters included in type definition </li>
</ul>
</div>
</div><div class="fragment" style="width: 100%;float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">real_vector</span><span class="p">;</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">integer_vector</span><span class="p">;</span>
</pre></div>
</div>
</div>
</div>
</div></div><div class="fragment" style="width: 100%;float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<ul>
<li>Will be done during compilation </li>
<li>Instanciated Template classes/functions: modified name (<em>MyVectorInt</em>, <em>MyVectorDouble</em>)</li>
</ul>
</div>
</div></div><div class="fragment" style="width: 100%;float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Template parameters can be:</p>
<pre><code>- Other types (typename)
- Integers
- Enum values</code></pre>
</div>
</div></div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Templates:-Adding-dimension-to-the-vector-type">Templates: Adding dimension to the vector type<a class="anchor-link" href="#Templates:-Adding-dimension-to-the-vector-type">&#182;</a></h2>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span>template &lt;typename T, int <span style="color:red;font-size:150%">dim</span> = 3&gt; class MyVector {
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<center> ... </center>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> T value[<span style="color:red;font-size:150%">dim</span>];
};
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="p">,</span> <span class="kt">int</span> <span class="n">dim</span> <span class="o">=</span> <span class="mi">3</span><span class="o">&gt;</span> <span class="k">class</span> <span class="nc">MyVector</span> <span class="p">{</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<center> ... </center>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="n">T</span> <span class="n">value</span><span class="p">[</span><span class="n">dim</span><span class="p">];</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Using it:</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">vector_3d</span><span class="p">;</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">2</span><span class="o">&gt;</span> <span class="n">vector_2d</span><span class="p">;</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Type-Matching:-scalar-product-function">Type Matching: scalar product function<a class="anchor-link" href="#Type-Matching:-scalar-product-function">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span>T scalarProduct(const <span style="color:red;font-size:150%">MyVector<T, dim></span> &amp;v1, const <span style="color:red;font-size:150%">MyVector<T, dim></span> &amp;v2) {
T res;
for (int d = 0; d &lt; dim; ++d)
res += v1[d] * v2[d];
return res;
}
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Using:</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">vector1_3d</span><span class="p">;</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">vector2_3d</span><span class="p">;</span>
<span class="kt">double</span> <span class="n">res</span> <span class="o">=</span> <span class="n">scalarProduct</span><span class="p">(</span><span class="n">vector1_3d</span><span class="p">,</span> <span class="n">vector2_3d</span><span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">res</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="o">&gt;</span> <span class="n">T</span> <span class="n">getMaximum</span><span class="p">(</span><span class="k">const</span> <span class="n">T</span> <span class="o">&amp;</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">T</span> <span class="o">&amp;</span><span class="n">b</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">a</span> <span class="o">&gt;</span> <span class="n">b</span><span class="p">)</span>
<span class="k">return</span> <span class="n">a</span><span class="p">;</span>
<span class="k">return</span> <span class="n">b</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>getMaximum</strong> working over vectors ?</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">;</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">res</span> <span class="o">=</span> <span class="n">getMaximum</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Template-specialization">Template specialization<a class="anchor-link" href="#Template-specialization">&#182;</a></h1><ul>
<li>Exceptions in type matching</li>
</ul>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;&gt;</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;</span>
<span class="n">getMaximum</span><span class="o">&lt;</span><span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;&gt;</span><span class="p">(</span><span class="k">const</span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;</span> <span class="o">&amp;</span><span class="n">v1</span><span class="p">,</span>
<span class="k">const</span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;</span> <span class="o">&amp;</span><span class="n">v2</span><span class="p">)</span> <span class="p">{</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;</span> <span class="n">max</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="n">max</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">getMaximum</span><span class="p">(</span><span class="n">v1</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">v2</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">max</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Template-specialization">Template specialization<a class="anchor-link" href="#Template-specialization">&#182;</a></h1><ul>
<li>Exceptions in type matching</li>
</ul>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span>
<span style="color:red;font-size:150%">template <>
</span>
MyVector&lt;double, 3&gt;
getMaximum&lt;MyVector&lt;double, 3&gt;&gt;(const MyVector&lt;double, 3&gt; &amp;v1,
const MyVector&lt;double, 3&gt; &amp;v2) {
MyVector&lt;double, 3&gt; max;
for (int i = 0; i &lt; 3; ++i) {
max[i] = getMaximum(v1[i], v2[i]);
}
return max;
}
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Template-specialization">Template specialization<a class="anchor-link" href="#Template-specialization">&#182;</a></h1><ul>
<li>Exceptions in type matching</li>
</ul>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea ">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;&gt;</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;</span>
<span class="n">getMaximum</span><span class="o">&lt;</span><span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;&gt;</span><span class="p">(</span><span class="k">const</span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;</span> <span class="o">&amp;</span><span class="n">v1</span><span class="p">,</span>
<span class="k">const</span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;</span> <span class="o">&amp;</span><span class="n">v2</span><span class="p">)</span> <span class="p">{</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="p">,</span> <span class="mi">3</span><span class="o">&gt;</span> <span class="n">max</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="n">max</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">getMaximum</span><span class="p">(</span><span class="n">v1</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">v2</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">max</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">;</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">res</span> <span class="o">=</span> <span class="n">getMaximum</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Templates-specialization">Templates specialization<a class="anchor-link" href="#Templates-specialization">&#182;</a></h1><ul>
<li>Can we code-factor more ?</li>
</ul>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="p">,</span> <span class="kt">int</span> <span class="n">dim</span><span class="o">&gt;</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span> <span class="n">dim</span><span class="o">&gt;</span> <span class="n">getMaximum</span><span class="p">(</span><span class="k">const</span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span> <span class="n">dim</span><span class="o">&gt;</span> <span class="o">&amp;</span><span class="n">v1</span><span class="p">,</span>
<span class="k">const</span> <span class="n">MyVector</span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span> <span class="n">dim</span><span class="o">&gt;</span> <span class="o">&amp;</span><span class="n">v2</span><span class="p">)</span> <span class="p">{</span>
<span class="n">MyVector</span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span> <span class="n">dim</span><span class="o">&gt;</span> <span class="n">max</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">dim</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="n">max</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">getMaximum</span><span class="p">(</span><span class="n">v1</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">v2</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">max</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<center>
This is overloading
</center>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Template-meta-programming">Template meta programming<a class="anchor-link" href="#Template-meta-programming">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">arithmetic</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">return</span> <span class="n">i</span> <span class="o">+</span> <span class="n">arithmetic</span><span class="p">(</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Let's call the function</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">arithmetic</span><span class="p">(</span><span class="n">a</span><span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;</span><span class="kt">int</span> <span class="n">i</span><span class="o">&gt;</span> <span class="kt">int</span> <span class="n">arithmetic_template</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">i</span> <span class="o">+</span> <span class="n">arithmetic_template</span><span class="o">&lt;</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="o">&gt;</span><span class="p">();</span>
<span class="p">}</span>
<span class="k">template</span> <span class="o">&lt;&gt;</span> <span class="kt">int</span> <span class="n">arithmetic_template</span><span class="o">&lt;</span><span class="mi">1</span><span class="o">&gt;</span><span class="p">()</span> <span class="p">{</span>
<span class="c1">// ends recursion</span>
<span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Let's-call-the-function">Let's call the function<a class="anchor-link" href="#Let's-call-the-function">&#182;</a></h2>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">arithmetic_template</span><span class="o">&lt;</span><span class="mi">5</span><span class="o">&gt;</span><span class="p">();</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Can-we-do-this-?">Can we do this ?<a class="anchor-link" href="#Can-we-do-this-?">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">arithmetic_template</span><span class="o">&lt;</span><span class="n">a</span><span class="o">&gt;</span><span class="p">();</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>And why ?</p>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Variadic-template-meta-programming">Variadic template meta programming<a class="anchor-link" href="#Variadic-template-meta-programming">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="o">&gt;</span> <span class="n">T</span> <span class="n">adder</span><span class="p">(</span><span class="n">T</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">v</span><span class="p">;</span> <span class="p">}</span>
<span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="p">,</span> <span class="k">typename</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
<span class="c1">// template ...Args is a variadic template</span>
<span class="n">T</span> <span class="n">adder</span><span class="p">(</span><span class="n">T</span> <span class="n">first</span><span class="p">,</span> <span class="n">Args</span><span class="p">...</span> <span class="n">args</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">first</span> <span class="o">+</span> <span class="n">adder</span><span class="p">(</span><span class="n">args</span><span class="p">...);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Using it simply</p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">adder</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">adder</span><span class="p">(</span><span class="mf">1.</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mf">3.</span><span class="p">,</span> <span class="mi">4</span><span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">adder</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">&quot;a&quot;</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">&quot;b&quot;</span><span class="p">));</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Take-away-message">Take away message<a class="anchor-link" href="#Take-away-message">&#182;</a></h1><ul>
<li><strong>Templating</strong> is a mechanism to <strong>substitute</strong> parameters during compilation</li>
<li><strong>Template Classes</strong> create types with parameters included in the type name</li>
<li><strong>Template parameters</strong> are other types, integers, enums</li>
<li>Compiler does <strong>type matching</strong> to deduce template parameters</li>
<li><strong>Specializations</strong> allow exceptions</li>
<li><strong>Overloading</strong> or <strong>Template</strong> ? no rule: need programming experience</li>
<li><strong>Meta-programming</strong> allows calculation at compilation</li>
<li><strong>Variadic templates</strong> allow flexible expressions</li>
</ul>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="About-Functors-and-Lambdas">About Functors and Lambdas<a class="anchor-link" href="#About-Functors-and-Lambdas">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">struct</span> <span class="n">MyFunctor</span> <span class="p">{</span>
<span class="kt">int</span> <span class="k">operator</span><span class="p">()()</span> <span class="p">{</span> <span class="k">return</span> <span class="mi">2</span><span class="p">;</span> <span class="p">}</span>
<span class="p">};</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="k">auto</span> <span class="n">f</span> <span class="o">=</span> <span class="n">MyFunctor</span><span class="p">();</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">f</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">struct</span> <span class="n">MyFunctor</span> <span class="p">{</span>
<span class="kr">inline</span> <span class="kt">int</span> <span class="k">operator</span><span class="p">()()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">a</span><span class="p">;</span> <span class="p">}</span>
<span class="kt">int</span> <span class="n">a</span><span class="p">;</span>
<span class="p">};</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="k">auto</span> <span class="n">f</span> <span class="o">=</span> <span class="n">MyFunctor</span><span class="p">();</span>
<span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
<span class="n">f</span><span class="p">.</span><span class="n">a</span> <span class="o">=</span> <span class="n">a</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">100000</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="k">auto</span> <span class="n">res</span> <span class="o">=</span> <span class="n">f</span><span class="p">();</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">struct</span> <span class="n">MyFunctor</span> <span class="p">{</span>
<span class="kr">inline</span> <span class="kt">int</span> <span class="k">operator</span><span class="p">()()</span> <span class="p">{</span> <span class="k">return</span> <span class="o">*</span><span class="n">a</span><span class="p">;</span> <span class="p">}</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">a</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="o">&gt;</span> <span class="kt">void</span> <span class="n">loop</span><span class="p">(</span><span class="n">T</span> <span class="n">f</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">100000</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="k">auto</span> <span class="n">res</span> <span class="o">=</span> <span class="n">f</span><span class="p">();</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
<span class="k">auto</span> <span class="n">f</span> <span class="o">=</span> <span class="n">MyFunctor</span><span class="p">();</span>
<span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
<span class="n">f</span><span class="p">.</span><span class="n">a</span> <span class="o">=</span> <span class="o">&amp;</span><span class="n">a</span><span class="p">;</span>
<span class="n">loop</span><span class="p">(</span><span class="n">f</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Lambda-function">Lambda function<a class="anchor-link" href="#Lambda-function">&#182;</a></h1><p><a href="http://fr.cppreference.com/w/cpp/language/lambda">http://fr.cppreference.com/w/cpp/language/lambda</a></p>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="o">&gt;</span> <span class="kt">void</span> <span class="n">loop</span><span class="p">(</span><span class="n">T</span> <span class="n">f</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">100000</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
<span class="k">auto</span> <span class="n">res</span> <span class="o">=</span> <span class="n">f</span><span class="p">();</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
<span class="n">loop</span><span class="p">([</span><span class="o">&amp;</span><span class="n">a</span><span class="p">]()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">a</span><span class="p">;</span> <span class="p">});</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div></div>
</section><section>
<div class="slide" style="float: left"><div class="full" style="width: 100%; float: left">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Implementation-of-std::for_each">Implementation of std::for_each<a class="anchor-link" href="#Implementation-of-std::for_each">&#182;</a></h1>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
<div class="output_area">
<div class="output_html rendered_html output_subarea output_execute_result">
<style>
.hll { background-color: #ffffcc }
.c { color: #408080; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #008000; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.cm { color: #408080; font-style: italic } /* Comment.Multiline */
.cp { color: #BC7A00 } /* Comment.Preproc */
.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #408080; font-style: italic } /* Comment.Single */
.cs { color: #408080; font-style: italic } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.kp { color: #008000 } /* Keyword.Pseudo */
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.kt { color: #B00040 } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BA2121 } /* Literal.String */
.na { color: #7D9029 } /* Name.Attribute */
.nb { color: #008000 } /* Name.Builtin */
.nc { color: #0000FF; font-weight: bold } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #0000FF } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #19177C } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BA2121 } /* Literal.String.Affix */
.sb { color: #BA2121 } /* Literal.String.Backtick */
.sc { color: #BA2121 } /* Literal.String.Char */
.dl { color: #BA2121 } /* Literal.String.Delimiter */
.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BA2121 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BA2121 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BA2121 } /* Literal.String.Single */
.ss { color: #19177C } /* Literal.String.Symbol */
.bp { color: #008000 } /* Name.Builtin.Pseudo */
.fm { color: #0000FF } /* Name.Function.Magic */
.vc { color: #19177C } /* Name.Variable.Class */
.vg { color: #19177C } /* Name.Variable.Global */
.vi { color: #19177C } /* Name.Variable.Instance */
.vm { color: #19177C } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<div class="highlight"><pre><span></span><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">Vec</span><span class="p">,</span> <span class="k">typename</span> <span class="n">T</span><span class="o">&gt;</span> <span class="kt">void</span> <span class="n">for_each</span><span class="p">(</span><span class="n">Vec</span> <span class="o">&amp;</span><span class="n">vec</span><span class="p">,</span> <span class="n">T</span> <span class="n">f</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&amp;</span><span class="nl">v</span> <span class="p">:</span> <span class="n">vec</span><span class="p">)</span> <span class="p">{</span>
<span class="k">auto</span> <span class="n">res</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span> <span class="n">v</span><span class="p">(</span><span class="mi">10000</span><span class="p">);</span>
<span class="n">for_each</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="p">[</span><span class="o">&amp;</span><span class="n">a</span><span class="p">](</span><span class="k">auto</span> <span class="o">&amp;</span><span class="n">v</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">a</span><span class="p">;</span> <span class="p">});</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div><div class="full" style="width: 100%; float: left">
<div class="cell border-box-sizing code_cell rendered">
</div>
</div></div>
</section></section>
</div>
</div>
<!-- loads reveal -->
<script>
require(
{
// it makes sense to wait a little bit when you are loading
// reveal from a cdn in a slow connection environment
waitSeconds: 1
},
[
"reveal.js/lib/js/head.min.js",
"reveal.js/js/reveal.js"
],
function(head, Reveal){
Reveal.initialize({
//width: '1200px',
//height: '100%'
// margins: 0.1,
controls: true,
progress: true,
history: true,
transition: 'fade',
margin: 0.02,
progress: true,
slideNumber: true,
// Optional libraries used to extend on reveal.js plugins
dependencies: [
{ src: 'reveal.js/lib/js/classList.js',
condition: function() { return !document.body.classList; }
},
{ src: 'reveal.js/plugin/markdown/marked.js',
condition: function() { return !!document.querySelector( '[data-markdown]' ); }
},
{ src: 'reveal.js/plugin/markdown/markdown.js',
condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/highlight/highlight.js',
async: true, callback: function() { hljs.initHighlightingOnLoad(); }
},
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
{ src: 'reveal.js/plugin/notes/notes.js',
async: true, condition: function() { return !!document.body.classList; }
}]});
var update = function(event){
if(MathJax.Hub.getAllJax(Reveal.getCurrentSlide())){
MathJax.Hub.Rerender(Reveal.getCurrentSlide());
}
};
Reveal.addEventListener('slidechanged', update);
}
);
$(document).ready(function(){
//$(".cell").css("width","90%");
//$(".cell").css("margin","0 auto");
//$(".output_area").css("text-align","center");
//$(".output_png").css("margin","0 auto");
//$("img").css("margin","0 auto");
//$(".output_html").css("margin", "0 auto");
//$(".output_latex").css("margin", "0 auto");
//$(".output_subarea").css("flex", "None");
$( "markdown" ).each(function( index ) {
$( this ).html(Markdown($( this ).text()));
});
})
</script>
</body>
</html>

Event Timeline