我想提供一个模板化函数,根据模板类型的大小来改变它的实现( - > specialization)。根据sizeof类型的模板专门化
事情与此类似(略类型转换),但没有如果/ ELSEIF:
template<class T>
T byteswap(T & swapIt)
{
if(sizeof(T) == 2)
{
return _byteswap_ushort (swapIt);
}
else if(sizeof(T) == 4)
{
return _byteswap_ulong(swapIt);
}
else if(sizeof(T) == 8)
{
return _byteswap_uint64(swapIt);
}
throw std::exception();
}
我知道有很多道路,以达到我的目标,但因为我试图了解SFINAE
和type traits
我我特别感兴趣的是使用这些技术的解决方案,以便在编译时决定选择哪种专业化以及哪些呼叫不被接纳。
或许实现一类特征is_4ByteLong和使用boost :: enable_if ...
我不得不承认,我卡住了,现在,所以我感谢你对任何帮助或建议
不错的答案,但我不会做'ByteswapImpl'的默认实现。这样,如果所需的专业化不存在,您只会收到编译错误。 – Job 2010-08-20 08:41:50
该函数可以是静态的,因此不需要创建对象(类似于boost :: numeric_cast和boost :: numeric_conververt)。 – Philipp 2010-08-20 08:44:32
我的印象是只有函数模板* partial * specialization不被支持......我错了吗? – Job 2010-08-20 09:04:26