C++によるテンプレートメタプログラミング

テンプレートメタプログラミングのサンプルです。

template.cpp

#include <iostream>

template <typename T = int> T add(T x, T y) {
  return x + y;
}

int main() {
  std::cout << add<>(1, 1) << std::endl;
  std::cout << add<int>(1, 1) << std::endl;
}


array.h

#pragma once

template <typename T = int, int LENGTH = 10> class Array {
  T array[LENGTH];
public:
  const int length = LENGTH;
  T& operator[](int);
  T sum();
};

template <typename T, int LENGTH> T& Array<T, LENGTH>::operator[](int index) {
  return array[index];
}

template <typename T, int LENGTH> T Array<T, LENGTH>::sum() {
  T s = 0;
  for (int i = 0; i < LENGTH; i++) {
    s += array[i];
  }
  return s;
}

main.cpp

#include "array.h"
#include <iostream>

int main() {
  //Array<> array;
  const int length = 10;
  //Array<int, length> array;
  auto array = Array<int, length>();
  for (int i = 0; i < array.length; i++) {
    array[i] = i;
    std::cout << array[i] << std::endl;
  }
  std::cout << array.sum() << std::endl;
}

注)テンプレートクラスのメンバー関数の実装はヘッダーファイルに記述してください。


参考サイト

1.Google:C++ template
2.Google:C++ template meta programming
3.C++テンプレートメタプログラミング超入門
4.テンプレートの実装をヘッダに書かなければならない理由

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中