1

テンプレートクラスがあり、同じテンプレートタイプのクラスのテンプレートメソッドを作成したいのですが、次のようになります。

template<class T>
class A
{
public:
    void Set<T>(const T& t)  {...}  // I think this is wrong.

...
};


A<int> a;
a.Set<int>(10);

それを機能させる方法は?どうもありがとう!

4

2 に答える 2

3

特別なことをする必要はありません。内でATも定義され、これには。の定義が含まれますSet。だからあなたはただ言うでしょう:

template< class T >
class A
{
public:
    void Set( const T& t ) {...}
};

テンプレートSetも作成して、さまざまなタイプを使用できるようにする場合は、次のようにします。

template< class T >
class A
{
public:
    template< typename U > void Set( const U& u ) {...}
};

最後に、テンプレート関数を呼び出すときに、テンプレート引数を明示的に宣言する必要がない場合があることに注意してください。それらは、それらを呼び出すために使用する引数のタイプから推測されます。つまり、

template< typename T > void Set( const T& t ) {...}

Set( 4 ) // T deduced as int
Set( '0' ) // T deduced as char
Set<int>( '0' ) // T explicitly set to int, standard conversion from char to int applies
于 2012-12-28T22:05:05.933 に答える
2

メンバーテンプレートを意味する場合:

template<class T>
class A
{
public:
    template <typename U> void Set(const U& u)  {...}
};
于 2012-12-28T22:05:32.470 に答える