我有三個函數做幾乎同樣的事情,但是這個過程是有點不同根據參數類型:最好的辦法派遣的好模板函數
template<typename T> void Func1(const T *in, T *out)
{
static_assert(std::is_same<T, INT8>::value
|| std::is_same<T, UINT8>::value
|| std::is_same<T, INT16>::value
|| std::is_same<T, UINT16>::value, "");
//...
}
template<typename T> void Func2(const T *in, T *out)
{
static_assert(std::is_same<T, INT32>::value || std::is_same<T, UINT32>::value, "");
//...
}
template<typename T> void Func3(const T *in, T *out)
{
static_assert(std::is_same<T, float>::value || std::is_same<T, double>::value, "");
//...
}
但我不想用戶必須決定哪個函數調用,所以我嘗試自動執行。遺憾的是到目前爲止,(我是一個C++初學者),我所知道的唯一辦法是:
template<typename T> void Function(const T *in, T *out)
{
if (std::is_same<T, UINT8>::value
|| std::is_same<T, UINT16>::value
|| std::is_same<T, INT8>::value
|| std::is_same<T, INT16>::value)
{
Func1(in, out);
return ;
}
if (std::is_same<T,INT32>::value || std::is_same<T,UINT32>::value)
{
Func2(in, out);
return ;
}
if (std::is_same<T,float>::value || std::is_same<T,float>:: double)
{
Func3(in, out);
return ;
}
}
我覺得這個解決方案完全醜,我想知道如果有什麼更好/更快/更優雅是可能的嗎?
什麼是'unsigned float'和'unsigned double'? – WhiZTiM
你可以使用C++ 11嗎? – Garf365
@ Garf365:是的! – FiReTiTi