LoginSignup
1
0

extern template使用

Posted at

目的

extern templateは、別のソースファイルで既に特定のテンプレートの実体化が行われていることをコンパイラに通知します。これによって、ソースコードの膨大化を防ぎ、コンパイル時間を短縮することができます。

通常、テンプレートが使用されると、コンパイラーはそのテンプレートが使用されるすべてのコンパイル・ユニットでそのテンプレートをインスタンス化しますが、これはコードの肥大化とコンパイル時間の増加につながります。 externテンプレートを使うと、そのテンプレートは他のコンパイル・ユニットですでにインスタンス化されているので、現在のコンパイル・ユニットでインスタンス化する必要はない、ということをコンパイラーに伝えます。

書き方

extern template class MyTemplate<int>;

MyTemplate.hppで宣言する。

// MyTemplate.hpp
#pragma once

template<typename T>
class MyTemplate {
public:
    MyTemplate(const T& value) : value_(value) {}
    void print() const { std::cout << "Value: " << value_ << std::endl; }
private:
    T value_;
};

もう一つソースファイル(Instantiation.cpp)に、MyTemplate<int>を実体化しました。

// Instantiation.cpp
#include "MyTemplate.hpp"

template class MyTemplate<int>;

Usage.cppで実体化せずMyTemplate<int>使用する

// Usage.cpp
#include "MyTemplate.hpp"

extern template class MyTemplate<int>; // 既に実体化したをコンパイラに通知する

int main() {
    MyTemplate<int> obj(42);
    obj.print();
    return 0;
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0