プログラミング言語「C++」についてどんな言語なのか解説

目次から探す

テンプレート

テンプレートは、C++の強力な機能の一つであり、汎用的なコードを書くために使用されます。

テンプレートを使用することで、同じコードを複数回書く必要がなくなり、より効率的かつ柔軟性の高いコードを作成することができます。

テンプレート関数

テンプレート関数は、引数や戻り値の型が決まっていない関数です。以下は、2つの引数を受け取り、それらを加算して返すテンプレート関数Addです。

template <typename T>
T Add(T a, T b)
{
    return a + b;
}

この例では、template <typename T>という行がテンプレート宣言です。Tは任意の型名であり、この場合は2つの引数aとbおよび戻り値の型に使用されます。Add関数内では、abがT型であることが保証されています。

以下はAdd関数を呼び出す例です。

int result1 = Add<int>(3, 4); // result1 = 7
double result2 = Add<double>(1.5, 2.5); // result2 = 4.0

この例では、Add<int>およびAdd<double>という形式でテンプレート引数を指定しています。これにより、それぞれint型およびdouble型に対応したAdd関数が生成されます。

テンプレートクラス

テンプレートクラスは、クラス自体が汎用的なものになることを可能にします。以下は、任意のデータ型に対応したStackクラスの例です。

template <typename T>
class Stack {
public:
    void Push(T value);
    T Pop();
private:
    std::vector<T> m_data;
};

template <typename T>
void Stack<T>::Push(T value)
{
    m_data.push_back(value);
}

template <typename T>
T Stack<T>::Pop()
{
    if (m_data.empty()) {
        throw std::out_of_range("Stack is empty");
    }
    T value = m_data.back();
    m_data.pop_back();
    return value;
}

この例では、template <typename T> class Stackという行がテンプレート宣言です。

Stackクラス内では、T型オブジェクトを格納するstd::vector<T> m_dataメンバ変数およびPushメソッドおよびPopメソッドが定義されています。

以下はStackクラスを使用する例です。

Stack<int> stack;
stack.Push(1);
stack.Push(2);
int value1 = stack.Pop(); // value1 = 2
int value2 = stack.Pop(); // value2 = 1

この例では、「Stack<int>」という形式でテンプレート引数を指定しています。これにより、int型に対応したStackクラスが生成されます。

1 2 3 4 5 6 7 8

目次から探す