C++ 函式模板返回值指定
阿新 • • 發佈:2019-02-04
C++函式模板不能偏特化,可以全特化。另外,返回值也是可以用static_cast指定的。
舉例如下:
template<typename T1, typename T2, typename T3>
T1 add(T2 a, T3 b)
{
return static_cast<int>(a + b);
}
指定T1為int,程式碼如下:
int result = add<int>(0.4, 0.9);
指定T1, T2引數為int和float,程式碼如下:
int result = add<int, float >(0.4, 0.9);
一個完整的利用函式模板指定函式返回值的例子如下:
#include <iostream>
enum class AAA : int {
TYPE1 = 33,
TYPE2 = 52,
TYPE3 = 92,
TYPE4 = 102,
TYPE5 = 22,
TYPE6 = 8,
TYPE7 = 12,
};
enum class BBB : int {
TPYE1 = AAA::TYPE1,
TYPE3 = AAA::TYPE3,
TYPE5 = AAA::TYPE5,
};
enum class CCC : int {
TPYE2 = AAA::TYPE2,
TYPE3 = AAA::TYPE3,
TYPE5 = AAA::TYPE5,
};
AAA uec2AAA (int uec) {
AAA rc;
switch (uec) {
case 1:
rc = AAA::TYPE1;
break;
case 2:
rc = AAA::TYPE2;
break;
case 3:
rc = AAA::TYPE3;
break ;
case 4:
rc = AAA::TYPE4;
break;
case 5:
rc = AAA::TYPE5;
break;
case 6:
rc = AAA::TYPE6;
break;
default:
break;
}
return rc;
}
template<typename T1>
T1 uec2Rc(int a)
{
return static_cast<T1>(uec2AAA(a));
}
int main(void)
{
BBB result = uec2Rc<BBB>(3);
printf("result = %d\n", static_cast<int>(result));
CCC result2 = uec2Rc<CCC>(2);
printf("result = %d\n", static_cast<int>(result2));
return 0;
}
還有一些下次再寫。