テンプレートクラスにテンプレート関数を実装する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 型に変換されて出力された。

次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2020/02/24/9217315/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。