1
的模板變種我想寫的memcpy的模板變種:錯誤的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)) ;
}
然後錯誤不存在,但在這種情況下編譯器無法檢查參數的大小
是否有辦法實現這兩個目的。
你可以添加一個[tag:static-assert]到第二個變體。 – 2013-04-04 12:13:53
我花了幾分鐘想知道這個,然後意識到你可能只是有一個錯字。 'AMPSync!= AMSync'。 [This](http://liveworkspace.org/code/1Z7Dq5$4)編譯。 – BoBTFish 2013-04-04 12:46:28