#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);
}
最終更新:2008年01月09日 20:33