天天看點

類型安全的變參函數any2string(),可用來替代類型不安全的snprintf()

any2string.sh用來生成any2string.h和test_any2string.cpp兩個檔案:

<a href="https://github.com/eyjian/mooon/blob/master/common_library/include/util/any2string.sh" target="_blank">https://github.com/eyjian/mooon/blob/master/common_library/include/util/any2string.sh</a>

any2string.h提供了一個類型安全的變參函數any2string(),可用來替代類型不安全的snprintf()等:

<a href="https://github.com/eyjian/mooon/blob/master/common_library/include/util/any2string.h" target="_blank">https://github.com/eyjian/mooon/blob/master/common_library/include/util/any2string.h</a>

test_any2string.cpp用來測試any2string.h

<a href="https://github.com/eyjian/mooon/blob/master/common_library/include/util/test_any2string.cpp" target="_blank">https://github.com/eyjian/mooon/blob/master/common_library/include/util/test_any2string.cpp</a>

any2string.h:

// Write by yijian on 2014/12/27

// DO NOT

// this header file is auto generated by any2string.sh

// edit any2string.sh if necessary

//

// 類型安全的變參函數,可用來替代類型不安全的sprintf()和snprintf()等函數

// 使用示例1: std::string str = any2string(20141227);

// 使用示例2: std::string str = any2string(20141227, "22:07:10");

// 使用示例3: std::string str = any2string(1, "2", '3', std::string("4"));

#ifndef MOOON_UTIL_ANY2STRING_H

#define MOOON_UTIL_ANY2STRING_H

#include string&gt;

#include sstream&gt;

template typename T0&gt;

inline std::string any2string(const T0&amp; t0)

{

    std::stringstream ss;

    ss t0;

    return ss.str();

}

template typename T0, typename T1&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1)

    ss t0 t1;

template typename T0, typename T1, typename T2&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2)

    ss t0 t1 t2;

template typename T0, typename T1, typename T2, typename T3&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3)

    ss t0 t1 t2 t3;

template typename T0, typename T1, typename T2, typename T3, typename T4&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4)

    ss t0 t1 t2 t3 t4;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5)

    ss t0 t1 t2 t3 t4 t5;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6)

    ss t0 t1 t2 t3 t4 t5 t6;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7)

    ss t0 t1 t2 t3 t4 t5 t6 t7;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21, const T22&amp; t22)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21, const T22&amp; t22, const T23&amp; t23)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21, const T22&amp; t22, const T23&amp; t23, const T24&amp; t24)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21, const T22&amp; t22, const T23&amp; t23, const T24&amp; t24, const T25&amp; t25)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21, const T22&amp; t22, const T23&amp; t23, const T24&amp; t24, const T25&amp; t25, const T26&amp; t26)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21, const T22&amp; t22, const T23&amp; t23, const T24&amp; t24, const T25&amp; t25, const T26&amp; t26, const T27&amp; t27)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21, const T22&amp; t22, const T23&amp; t23, const T24&amp; t24, const T25&amp; t25, const T26&amp; t26, const T27&amp; t27, const T28&amp; t28)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28;

template typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29&gt;

inline std::string any2string(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, const T4&amp; t4, const T5&amp; t5, const T6&amp; t6, const T7&amp; t7, const T8&amp; t8, const T9&amp; t9, const T10&amp; t10, const T11&amp; t11, const T12&amp; t12, const T13&amp; t13, const T14&amp; t14, const T15&amp; t15, const T16&amp; t16, const T17&amp; t17, const T18&amp; t18, const T19&amp; t19, const T20&amp; t20, const T21&amp; t21, const T22&amp; t22, const T23&amp; t23, const T24&amp; t24, const T25&amp; t25, const T26&amp; t26, const T27&amp; t27, const T28&amp; t28, const T29&amp; t29)

    ss t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29;

#endif // MOOON_UTIL_ANY2STRING_H

繼續閱讀