C ++包装重载函数

时间:2013-03-29 18:34:47

标签: c++ overloading

我想为一堆重载函数创建一个包装

void print(int i);
void print(long i);
void print(char* s);
...

void myPrint(int x, int y, ??? toPrint){
    moveTo(x,y);
    print(toPrint);
}

我该怎么办?是否可以不使用模板?

3 个答案:

答案 0 :(得分:2)

如果您无法使用模板,则可以采用myPrintprint相同的方法。

void myPrint(int x, int y, int toPrint){
    moveTo(x,y);
    print(toPrint);
}

void myPrint(int x, int y, long toPrint){
    moveTo(x,y);
    print(toPrint);
}

void myPrint(int x, int y, char* toPrint){
    moveTo(x,y);
    print(toPrint);
}

由于您正在进行嵌入式编码,因此您也可以原谅自己使用宏。

#define MYPRINT( x, y, toPrint ) \
    do {                         \
        moveTo(x,y);             \
        print(toPrint);          \
    } while(false)

答案 1 :(得分:2)

我想你可以写三个单独的包装器。它等同于模板将产生的内容(即一些代码膨胀)。

void myPrint(int x, int y, int toPrint) {
    moveTo(x,y);
    print(toPrint);
}

void myPrint(int x, int y, long toPrint) {
    moveTo(x,y);
    print(toPrint);
}

void myPrint(int x, int y, char *toPrint) {
    moveTo(x,y);
    print(toPrint);
}

我不一定推荐这个,因为代码隐藏宏在这些日子里非常不受欢迎,但您可以使用预处理器宏作为模板替换。

#define DEFINE_MY_PRINT(Type)                  \
    void myPrint(int x, int y, Type toPrint) { \
        moveTo(x,y);                           \
        print(toPrint);                        \
    }

DEFINE_MY_PRINT(int)
DEFINE_MY_PRINT(long)
DEFINE_MY_PRINT(char *)

答案 2 :(得分:1)

模板是首选,但您可以(ab)使用预处理器:

#define MY_PRINT(T) void myPrint(int x, int y, T toPrint) \
{ \
    moveTo(x,y); \
    print(toPrint); \
}

MY_PRINT(int)
MY_PRINT(long)
MY_PRINT(char*)