「C++/Tips/Technique/CompileTimePolymorphism/Code」の編集履歴(バックアップ)一覧に戻る

C++/Tips/Technique/CompileTimePolymorphism/Code - (2008/01/09 (水) 20:33:40) のソース

//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);
}