1. 程式人生 > >C++ 函式模板返回值指定

C++ 函式模板返回值指定

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; }

還有一些下次再寫。