-1

PayOff は抽象基本クラスで、CallPayOff と PutPayOff はそこから派生します。呼び出し演算子は基本クラスで純粋仮想関数として定義され、CallPayOff と PutPayoff は独自の実装を提供します。

vector<PayOff*> v;
v.push_back(new CallPayOff(20));
v.push_back(new PutPayOff(20));
vector<double> payVals;
payVals.reserve(v.size());
transform(v.begin(), v.end(), back_inserter(payVals),  bind2nd(mem_fun(&PayOff::operator()),this));

呼び出し演算子は次のように定義されます。

class PayOff
{
public:
    virtual double operator()(double spot)const = 0;
    virtual ~PayOff(){}
};

どなたか見ていただけませんか?Boost/C++11 はオプションではありません。

4

4 に答える 4

1

あなたは、あなたが期待していることを言いませtransformん。PayOffおそらく、ある値で各オブジェクトを呼び出すことです。その場合、ファンクターは次のようになります。

bind2nd(mem_fun(&PayOff::operator()),some_value)

または、過去にとらわれていない人のために、

[=](PayOff* p){(*p)(some_value;}}

また

bind(&PayOff::operator(), _1, some_value);

this代わりに、グローバル関数で存在しないものにバインドしようとしています。メンバー関数では存在しますが、double.

于 2013-08-19T14:08:33.580 に答える
0

メイン関数から変換を呼び出している場合、this存在しません。

于 2013-08-19T14:08:02.977 に答える
0

次のように double を指定する必要があるようです (上で提案したポワントではありません)。

const double spot(99.);
transform(v.begin(), v.end(), payVals.begin(),  bind2nd(mem_fun(&PayOff::operator()),spot));

PS私はあなたの構文をチェックしていませんが、基本的にこれはc ++ 11より前のコードで行う方法です。

于 2013-08-19T14:49:30.383 に答える