2013-02-20 25 views
1

我有一個基函數如何從參數化的基本函數生成多個函數指針?

int base(const int i, const double &x)

在這個函數中,我認爲i是一個「參數」(其可以採取預定義的值從0到N-1),而x我認爲的實際的「參數」(可以取任意值)。我需要的是創建一個函數指針數組int (*pointers[N])(const double &x)。陣列的每個成員對應於參數i的不同值,因此每個呼叫pointers[n](x)應等同於呼叫base(n, x)

有沒有辦法實現這個功能?

我一直在試圖教育自己關於函子(這是一種方式去?),最近也研究了std::bind,但我的理解是,它只適用於C + + 11(我目前不能使用)。

任何建議或代碼片段將是非常有用的。謝謝!

回答

1

可以使用非捕獲lambda表達式爲:

typedef int (*fp)(double); 

fp p1 = [](double x) -> int { return base(1, x); }; 
fp p2 = [](double x) -> int { return base(2, x); }; 
fp p3 = [](double x) -> int { return base(3, x); }; 

這並不捕獲lambda表達式工作,所以你不能生成那些編程。這與C中每個值的拼寫功能基本上沒有區別:

int f1(double x) { return base(1, x); } 
fp p = f1; 
+0

感謝您的回答!....問題如下:不同參數值的數量很大,更重要的是,在編譯時不知道。因此,我不能隨便寫下「p1」,「p2」,「p3」,「f1」等....我需要能夠通過循環來完成命令.... – Chrys 2013-02-21 00:10:20

+0

@Chrys:不幸的是,C++中的函數不是真正的一流對象,並且不能動態地創建函數。如果你可以使用類似函數的對象,這將是微不足道的,但不是原始函數指針。他們只是沒有足夠的狀態。 – 2013-02-21 00:18:43

+0

我需要使用原始指針才能與最初在Fortran中編寫的遺留代碼進行交互,我一直通過C調用它(這本來就是一團糟)......我一直在思考如何使用functor類,其中的調用操作符將鏈接到每個不同的函數,以及一個不同的對象,其中的函數將在循環中通過參數值創建(但是,我不太熟練,不知道如何完全做到這一點) – Chrys 2013-02-21 00:25:01

相關問題