[英]Using variable values in function names
我有一系列基於3個整數不同定義的函數。 我想在函數名稱中使用變量值。 這可以使用if-else語句來實現:
if (i == 0 and j == 0 and t == 0) {
return E_0_0_0(args);
}
else if (i == 1 and j == 0 and t == 0) {
return E_1_0_0(args);
}
...
問題是存在大量這些可能性,程序的這一部分對時間非常敏感。 我可以使用基於變量的i, j, t
的自定義值使用任何東西來調用函數E_i_j_t(args)
嗎? 我已經研究過預處理程序語句,但是有點迷茫。
#define CALL(x,y,v) f##x##y(v)
void f00(int v) { printf("00\n"); }
void f10(int v) { printf("10\n"); }
void f14(int v) { printf("14\n"); }
int main() {
CALL(0,0,0);
CALL(1,0,0);
CALL(1,4,0);
}
##
是一個運算符,僅在替換了宏的參數后才填充左右“值”。
這樣的宏可能會有所幫助:
#define if_match_invoke_E(_i, _j, _t) \
if (i == _i && j == _j && t == _t) { \
E_ ## _i ## _ ## _j ## _ ## _t(args); \
}
然后:
if_match_invoke_E(0, 0, 0)
else if_match_invoke_E(1, 0, 0)
函數指針數組也可能起作用:
void (*)(args_t) E[] = { E_0_0_0, E_1_0_0 };
E[i](args);
但是總的來說,具有這樣的功能是一個糟糕的設計。
如果您是c ++程序員,則可以考慮使用none-type模板參數。 我想您正在使用它作為版本控制的一些方法; 在這種情況下,將所需版本定義為consexpr id並將其用作默認模板值可能會派上用場。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.