我正在使用boost :: bind來即時創建組合函數,並希望將該對象存儲爲某些類成員變量以供以後使用。例如,我們有兩個函子:如何將boost :: bind對象存儲爲成員變量?
struct add{double operator()(double x, double y) const{return x+y;};};
struct multiply{double operator()(double x, double y) const{return x*y;};};
然後創建一個函數f(X,Y,Z)=(X + Y)* Z,我可以這樣做:
auto f = boost::bind<double>(multiply(), boost::bind<double>(add(), _1, _2), _3);
,並呼籲f(x,y,z)完美地工作。現在我想把f保存爲類成員變量,如下所示:
struct F
{
auto func;
double operator(const std::vector<double>& args) const
{
return func(args[0],args[1],args[2]); //Skipping boundary check
}
}
F f_obj;
f_obj.func = f;
f_obj(args);
但是我當然不能聲明一個自動變量。有什麼辦法可以解決這個問題嗎?
請注意,我沒有使用boost :: function,因爲它會顯着影響性能,這對我很重要。
感謝您的任何意見。
boost :: function正是我嘗試的第一件事,但編譯器不能內聯boost :: function包裝器。從我的測試中,使用boost :: function比本地代碼慢5倍,而直接使用boost :: bind沒有可觀察的開銷。 – matII