2014-06-23 34 views
1

我想建立一个快捷方式用于制备类似的功能调用C++级联和strinization操作者

int g[2]; 

void f1() { 
    g[0] = 1; 
} 

void f2() { 
    g[1] = 2; 
} 

void (*f)(); 

由于函数f1,f2的有一些共同的图案,我可以通过下的快捷++级联(##)和strinization(#)运算符或别的东西有这样的:使用函数指针数组

for (int i = 0; i < 2; i++) { 
    // have to do something to get the function name formed like f1, f2 
    // and then assign f to f1 or f2 and call f, based on value of i 
    // need help in this portion 
} 
+0

但为什么不将索引作为常规参数传递给函数? –

回答

4
template<size_t i> 
void f() 
{ 
    g[i-1] = i; 
} 

f<1>(); 
f<2>(); 
+0

在这里使用模板而不是仅仅使用'size_t'参数是否有缺点?对于每个函数调用,您都完全生成一个新函数。您选择使用模板有什么原因吗? – 0x499602D2

+0

@ 0x499602D2 OP没有太多的继续。但是如果他有X几乎相同的功能,有什么区别? –

2

您可以用下面的办法

for (int i = 0; i < 2; i++) { 
    void (*pf[])() = { f1, f2 }; 
    pf[i](); 
}