我希望有一組函數可以接受任何uintX_t
變體,而無需複製/粘貼大量代碼。到目前爲止,我正試圖使用「標記」來確定要調用的函數。由於顯而易見的原因,T = unsigned
不起作用,因爲我可能有uint32_t
,uint16_t
等用於顯式功能專業化的默認模板參數
struct number_tag {};
struct hexadecimal : number_tag {};
struct number : number_tag {};
template <typename T = unsigned, typename Tag>
void write(T t);
再後來在.cpp文件:
template <>
void write<unsigned, hexadecimal>(unsigned num)
{
}
template <>
void write<unsigned, number>(unsigned num)
{
}
,理想我想這樣稱呼它:
write<number>(10);
write("\n");
write<hexadecimal>(0xFF);
如何我寫這篇文章,這樣我就不用做write<unsigned, number>
和創建一批專業化的每一個uintX_t
變種?
注意這樣的代碼'寫 (10);'暗示'number'是* first *模板參數,這就是爲什麼兩個答案都顛倒了模板參數的順序。 –
aschepler
2014-09-13 12:45:05