テンプレートクラスにテンプレート関数を実装する2020年02月24日 14時48分31秒

C++ はテンプレートが導入されてから随分と柔軟性が増した。ここまではそれこそ二十年前の話。特に、C++17 辺りからはテンプレートやコンパイル時に出来ることに、更に幅が出て来て、とても便利になっている。

テンプレートクラスに、テンプレート関数を実装すること自体は、目新しい物でもないが、今回は次回のための前振りも含めている。

#include <iostream>

template< typename T1 >
class Class
{
    T1 value_;
public:
    Class( const T1& value ) : value_( value ){}

    template< typename T2 >
    void 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 >();
}
簡単な例として、 float 型で値を保持し、print 関数を呼ぶときに static_cast をする。
% c++ template_function_of_template_class.cpp
% ./a.out 
3
3.14
1
それぞれ、int 型、double 型、bool 型に変換されて出力された。

次回