« 2004年1月 | トップページ | 2004年4月 »

2004年2月16日 (月)

自己言及型テンプレート

template< typename T >
class	X{};

class	A :
	public X< A >
{
};
これは合法。


class	B{};

template< typename T >
class	X{};

template< typename U >
class	A :
	public X< A< B > >
{};
これも合法。
でも、Bの代わりにXを指定することは出来ない。当たり前だけど。


template< typename T >
class	X{};

template< typename U >
class	A :
	public X< A< X < ... > > >
{};
こう、順を追って行けばわかりやすいけどいきなり最後のが出てきたりして、AやXのテンプレート引数が4つも5つもあるとそろそろ死ねる。
気づくのにえらい時間がかかった。

| | コメント (0)

2004年2月14日 (土)

クラステンプレートのテンプレートメンバ関数。

#include <windows.h>

template< typename T >
class	A
{
public:
	template< typename U >
	void	foo( A<U> pU );
};
template< typename T >
template< typename U >
inline void	A<T>::foo( A<U> pU )
{
	int t = 0;
}


int __stdcall	WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
	A<int>	a;
	A<char>().foo( a );
	return 0;
}
俺は今まで


template< typename T, typename U >
inline void	A<T>::foo( A<U> pU )
{
	int t = 0;
}
こう書くもんだと思ってたんですが実は


template< typename T >
template< typename U >
inline void	A<T>::foo( A<U> pU )
{
	int t = 0;
}
こうらしいですね。

| | コメント (0)

« 2004年1月 | トップページ | 2004年4月 »