也許我是用這個問題離開左邊的領域,但是有可能通過構造函數定義成員函數嗎?通過構造函數初始化成員函數
在我的情況下,我想寫一個類來執行健壯的模型擬合(使用RANSAC)。我希望這可以推廣到不同類型的模型。例如,我可以用它來確定飛機對一組3D點的估計。或者,也許我可以確定兩組點之間的轉換。在這兩個例子中,可能需要有不同的錯誤函數和不同的擬合函數。而不是使用類,靜態函數調用可能看起來像
model = estimate(data, &fittingFunc, &errorFunc);
我想知道如果我可以有這些模塊化功能的成員實例?
喜歡的東西
class Estimator
{
private:
// estimation params
double errorFunc(std::vector<dtype>, double threshold); // Leave this unimplemented
double fittingFunc(std::vector<dtype>, Parameters p); // Leave this unimplemented
public:
Estimator(void (*fittingFunc(std::vector<dtype>, Parameters), void (*errorFunc(std::vector<dtype>, double));
dtype estimate(data); // Estimates model of type dtype. Gets implemented
};
Estimator::Estimator(void (*fittingFunc(std::vector<dtype>, Parameters), void (*errorFunc(std::vector<dtype>, double))
{
fittingFunc = fittingFunc;
errorFunc = errorFunc;
}
我想我已經在我的例子bastardized正確的語法,但我希望這個問題是清楚的。基本上我問:構造函數是否可以接受函數指針作爲參數並將它們賦值爲成員函數的實現?
其次,即使這是可能的,它被認爲是不好的形式嗎?
更新:如果有幫助,here is MATLAB code for robust estimation有這種一般化結構的我希望能複製在C++
的回答你的問題是**是**。並在'double'中更正你的代碼;'和這個分號是爲了什麼? –
@ k-five:錯字,對不起。是的,這可能嗎?或者是的,這是不好的形式?或兩者? – marcman
儘管[*** Pimpl idiom ***](http://stackoverflow.com/questions/60570/why-should-the-pimpl-idiom-be-used)可能是更好的方法。 –