2016-05-13 4 views

ответ

3

Да, вы можете легко достичь, создав массив указателей на функции. Это наиболее читаемым, если вы псевдоним типа первой функции:

void hello(int); 
void world(int); 

int main() 
{ 
    using fn = void(int); 
    fn * arr[] = { hello, world }; 
} 

Использование:

fn[0](10); 
fn[1](20); 

без отдельного псевдонима синтаксис немного Хайрер:

void (*arr[])(int) = { hello, world }; 

Или:

void (*arr[2])(int); 
arr[0] = hello; 
arr[1] = world; 
+0

'using' ... это, вероятно, будет еще несколько лет, прежде чем я помню, что я могу сделать это. – user4581301

+1

@ user4581301 Лучше узнайте об этом! Это невероятно полезно. :) – erip

0

Да, вы можете, но may I recommend std::function? Он обрабатывает более сложные случаи, такие как указатели на методы класса, гораздо проще.

Вот пример как пути указателя функции и станд :: функции, как:

#include <iostream> 
#include <functional> // for std::function 

//typedef void (*funcp)(int); // define a type. This makes everything else way, way easier. 
//The above is obsolete syntax. 
using funcp = void(*)(int); // Welcome to 2011, monkeyboy. You're five years late 


void hello(int val) // put the function up ahead of the usage so main can see it. 
{ 
    std::cout << val << std::endl; 
} 


int main() 
{ 
    funcp man[10]; 
    man[0]= hello; 
    man[0](2); 

    std::function<void(int)> man2[10]; // no need for typdef. Template takes care of it 
    man2[0] = hello; 
    man2[0](3); 

} 
+0

'typedef' действительно устарел на C++. 'использование' является более мощной и читаемой альтернативой. –

+0

Просто ругал себя выше, чтобы не использовать его. – user4581301