※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「C++/Tips/Technique/CompileTimePolymorphism/Code」の編集履歴(バックアップ)一覧はこちら

C++/Tips/Technique/CompileTimePolymorphism/Code」の最新版変更点

追加された行は青色になります。

削除された行は赤色になります。

 //cpp/linenumber
 
 #include <iostream>
 
 struct point_tag {};
 struct vector_tag {};
 
 struct Point {
     typedef point_tag type;
 };
 
 struct Vector {
     typedef vector_tag type;
 };
 
 // Point用 print
 void print_(const Point& target, point_tag) {
     std::cout << "Point\n";
 }
 
 // Vector用 print
 void print_(const Vector& target, vector_tag) {
     std::cout << "Vector\n";
 }
 
 // Point/Vector用print
 template <typename Arg>
 void print( const Arg &x ) {
     print_( x, typename Arg::type() );  // Arg::type で上記のどっちかに振り分ける
 }
 
 int main() {
     Point p;
     Vector v;
     print(p);
     print(v);
 }