memcpy のテンプレートバリアントを書きたい:
template< typename T >
inline T& MemCopy( T& dest, const T& src )
{
*( T* )memcpy( &dest, &src, sizeof( src ) ) ;
}
VS2010 で次のコードをコンパイルしようとすると:
typedef short AMSync[ 4 ] ;
static AMPSync aSync ;
void Init( const AMPSync& sync )
{
MemCopy( aSync, sync ) ;
}
エラーが発生します:
'T &MemCopy(T &,const T &)' : template parameter 'T' is ambiguous
: see declaration of 'MemCopy'
could be 'const short [4]'
or 'AMPSync'
私が使用する場合:
template< typename T1, typename T2 >
inline T1& MemCopy( T1& dest, const T2& src )
{
*( T1* )memcpy( &dest, &src, sizeof( src ) ) ;
}
エラーはありませんが、この場合、コンパイラは引数のサイズをチェックできません
両方の目的を達成する方法はありますか。