C++ meta programming

inline void print_item (size_t const i, size_t const j)
{
 std::cout << i << "x" << j << "=" << i * j << " ";
}
 
template <size_t I, size_t J>
struct line_t
{
 inline static void print ()
 {
  print_item(I,J);
  line_t<I+1,J>::print();
 }
};
 
template <size_t I>
struct line_t<I,I>
{
 inline static void print ()
 {
  print_item(I,I);
 }
};
 
template <size_t N>
struct table_t
{
 inline static void print ()
 {
  table_t<N-1>::print();
  std::cout << std::endl;
  line_t<1,N>::print();
 }
};
 
template <>
struct table_t<1>
{
 inline static void print ()
 {
  line_t<1,1>::print();
 }
};
 
template <size_t N>
struct meta99
{
 inline static void print ()
 {
  table_t<N>::print();
  std::cout << std::endl;
 }
};
 
int main() {
	meta99<9>::print ();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章