オーバーロードされた関数の束のラップを作成したい
void print(int i);
void print(long i);
void print(char* s);
...
void myPrint(int x, int y, ??? toPrint){
moveTo(x,y);
print(toPrint);
}
どうすればいいですか?テンプレートなしで行くことは可能ですか?
オーバーロードされた関数の束のラップを作成したい
void print(int i);
void print(long i);
void print(char* s);
...
void myPrint(int x, int y, ??? toPrint){
moveTo(x,y);
print(toPrint);
}
どうすればいいですか?テンプレートなしで行くことは可能ですか?
テンプレートを使用できない場合は、 で行ったのと同じアプローチを取ることができmyPrint
ますprint
。
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)
3 つの個別のラッパーを作成できると思います。これは、テンプレートが生成するものと同じです (つまり、少しコードが肥大化します)。
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 *)
テンプレートが優先されますが、プリプロセッサを (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*)