Project

General

Profile

Talk #3188 » ex4_crtp.cpp

Example 4: CRTP for static polymorphism - Glesaaen, Jonas, 2016-02-05 12:59

 
1
/*
2
 * Created: 04-02-2016
3
 * Modified: Fri 05 Feb 2016 10:52:38 CET
4
 * Author: Jonas R. Glesaaen (jonas@glesaaen.com)
5
 */
6

    
7
#include<iostream>
8

    
9
template <typename T>
10
class Base
11
{
12
public:
13
  virtual double foo()
14
  {
15
    std::cout << "Casting" << std::endl;
16
    return static_cast<T*>(this)->foo();
17
  }
18
};
19

    
20
class Cl1 : public Base<Cl1>
21
{
22
public:
23
  double foo()
24
  {
25
    return 4;
26
  }
27
};
28

    
29
class Cl2 : public Base<Cl2>
30
{
31
public:
32
  double foo()
33
  {
34
    return 5;
35
  }
36
};
37

    
38
template <typename Type>
39
double call(Base<Type> x)
40
{
41
  return x.foo();
42
}
43

    
44
int main(int, char**)
45
{
46
  auto x = Cl1 {};
47
  auto y = Cl2 {};
48

    
49
  std::cout << call(x) << "\n";
50
  std::cout << call(y) << "\n";
51
}
(6-6/7)