2013-12-09 64 views
1

的函數,如果我有:如何調用保存在字符串

void print_1(); 

void print_2(); 

void print_3(); 

和我還有一個功能叫valid();它返回一個整數

我要聲明一個string = "print_x());"

,我想以x取代valid();返回的值

例如,如果返回值爲valid();3

  =====> the string will be ("print_3();") 

,然後我想打電話給我要讓這樣的調用,它保存在字符串變量的函數, :

print_3(); 

我怎麼能做到這一點

+1

在c/C++中沒有優雅的方法,您需要一個調用正確函數的if/else。 – KevinDTimm

+1

使用c#和反射;) –

回答

2

C++對這種編程沒有任何支持。

如果你只有三個函數,那麼你可以解析字符串並寫一個switch語句來調用所需的函數。不過,我懷疑你正在尋找類似於Perl,Python,Ruby,Lua等腳本語言中的eval()函數。C++沒有這樣的東西。

+1

但是,您可以編寫這樣的功能,用於已知的一組函數。 – Nawaz

+1

@Nawaz是的,這就是我的第二段說 –

+0

所以,選擇11個功能之一的最佳方式是什麼? – user3084126

7

這是「不可能直接」。

你可以,但是,簡單地做:

switch (code) { 
    case 1: call_1(); break; 
    case 2: call_2(); break; 
} 

等等

+0

你應該向OP顯示一個方法,如何將字符串轉換爲'code'(例如使用'std :: map'或s.th.),或者給出一個帶有if

+0

@ g-makulik實際上,OP基本上有一個可以使用的有效()的整型就緒表單。如果首先列出更多代碼,我會提供一個擴展解決方案。我幫助解決了OP想知道的一個特殊問題。 – ScarletAmaranth

+0

那麼,選擇11個函數之一的最佳方法是什麼? – user3084126

0

正如其他人指出,您的具體要求,是不是用C++實現。但是您可以考慮將以下代碼作爲switch聲明的替代方案。

#include <iostream> 
using namespace std;                 
void print_0()                  
{                      
    cout << "Print 0\n";                
}                      
void print_1()                  
{                      
    cout << "Print 1\n";                
}                      
void print_2()                  
{                      
    cout << "Print 2\n";                
}  
typedef void(*FunctionPointer)(); 
FunctionPointer functionPointers[] = {&print_0, &print_1, &print_2}; 
int main(int argc, char **argv) 
{ 
    int return_value = 0; 
    functionPointers[return_value](); 
    return_value = 1; 
    functionPointers[return_value](); 
    return_value = 2; 
    functionPointers[return_value](); 
    return 0; 
} 

該代碼使用函數指針數組根據返回值調用特定函數。

+0

謝謝親,但我會用其他的 我認爲它更容易 – user3084126

+0

是的,它更容易。 – KodingKid

+0

其實,這正是我要做的。像這樣比開關簡單得多。 –