テンプレートクラスにテンプレート関数なので、template template と指定する ― 2020年02月25日 14時50分23秒
このテンプレートクラスに所属するテンプレートメンバ関数を別途実装するには以下のような template template と二度重ねる形になる。
実行結果は前と同じ。
#include <iostream>
template< typename T1 >
class Class
{
T1 value_;
public:
Class( const T1& value ) : value_( value ) {}
template< typename T2 > void print() const;
};
template< typename T1 >
template< typename T2 >
void Class< T1 >::print() const
{
std::cout << static_cast< T2 >( value_ ) << std::endl;
}
int main()
{
Class< float > c( 3.14 );
c.print< int >();
c.print< double >();
c.print< bool >();
}
% c++ template_function_of_template_class2.cpp
% ./a.out
3
3.14
1
AIX の xlc コンパイラを除く、Sun CC、GNU G++、そして、Clang C++ コンパイラはテンプレートが増えると、指数関数的にメモリの利用量が増えていく。AIX の xlc はメモリは増えないが時間が掛かるようだ。その為、全てのテンプレートをインラインで実装すると、それだけコンパイルに時間が掛かるようになる。そこで、実装を分けて、実装が必要なところだけヘッダファイルで実装を読み込むと、メモリの利用も抑え、コンパイルを早くする事が出来る。
前回。
最近のコメント