2011-05-04 123 views
2

我試圖建立一個多項式函數發生器,以便它將一個向量(任意大小)作爲參數,並生成一個多項式函數,我可以稍後使用。指向函數或仿函數的指針?函數發生器

例如

poly_gen(vector<int> power_index) 

返回一個函數(或通過其它方法)中的形式的(我可以與另一種功能調用)

y(k)=a0+ a1*n+ a2*n^2 + a3*n^3 + ... + ak*n^k 

其中A0,A1 .... AK存儲在病媒power_index

,後來我可以

int calc_poly(int n) 
叫它

,這calc_poly可以通過poly_gen()

PS還給我一個號碼,使用所產生的多項式計算: 我不知道如何通過關鍵詞來搜索這個問題。 功能,建設,發電機,指針,函數... 沒有給我想要的結果。

謝謝大家!

+0

此關係問題可能對您有用:http://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int – 2011-05-04 22:42:16

回答

5

你不能在C++運行時生成函數,所以你將不得不使用函子。

您可以創建一個對象,以某種方式(可能是直接複製)存儲power_index給出的係數,並給它一個運算符,該運算符將採用該係數並計算多項式的值(霍納定律?)。然後你可以自由地傳遞這個對象。

所以,你需要一個構造函數,一個係數的內部表示和一個operator()來做實際的計算。應該很簡單。

+1

技術上你可以在運行時生成彙編代碼,並跳轉到代碼 – 2011-05-04 21:43:15

+0

似乎函數是有希望的。謝謝大家! – 2011-05-05 02:19:39

+0

@Doug T:也許吧。已經有系統(可能還是)不允許執行可寫入進程的內存(不知道他們將如何處理Lisp編譯器或JIT編譯器)。無論如何,這將是非常系統特定的。 – 2011-05-05 13:41:15

1

有一個很好的「羅塞塔石」question(幾乎)這個問題,而回來。

有有幾個C++的答案:一個使用boost::lambda,一個使用更conventional approach,並使用MPL(還有一個C++0x版本,恕我直言,將是理想的解決方案,如果你的編譯器支持的話)之一。很明顯,簡單的二次方將需要推廣到任意數量的權力,但與讓你的頭部圍繞函數對象概念相比,這很簡單。

+1

您可以在答案下複製「鏈接」鏈接的地址以獲取帶有錨點的URL;) – Skurmedel 2011-05-04 21:58:37

+0

哦!不知怎的,我以前從來沒有注意到!謝謝,非常有用;直接鏈接添加上面。 – timday 2011-05-04 22:23:27