0

私はタスクで忙しく、構造を作成する必要があり、その構造を使用してオブジェクトを作成および削除する必要があります。

これが私が内部に関数を持つ構造体を作成した方法です。

struct Operation
{
    char op;
    double (*apply)(Operation*, double,double); // takes two doubles
}

私は完全に理解しています。次に、オブジェクトを作成する必要があります。

Operation* Make(char op)
{
    Operation* ret = new Operation;
    ret -> op = op;
    ret -> apply = doit;//doit is a norther function 
    return ret;
}

「->」のオペラは次のように言っているのと同じです。

(*ret).op = op;

そして、オブジェクトを削除します。

void BrakeObject(Operation& o)
{
    delete o;
    o = NULL;
}

関数(適用)は基本関数と同じように見えますか?これは配列ですか?

 Operation* ret = new Operation;

オブジェクトは何ですか?それは単なる関数ですか?

4

2 に答える 2

1

なぜ動的割り当てなのですか?なぜ単純ではないのですか?

Operation Make(char op)
{
    Operation ret = {op, doit};
    return ret;
}

または、C ++ 11を使用している場合は、次のようにします。

Operation Make(char op)
{
    return {op, doit};
}

どちらの場合も、手動で削除する必要はありません。

また、なぜapply別の操作を行うのですか?コメントには「2つのダブルを取る」と書かれているので、次のようになります。

double (*apply)(double,double);

私にはもっと理にかなっているでしょう。また、どこdoitから来たのですか?apply関数をパラメーターとして渡す方が理にかなっているのではないでしょうか。提案されたすべての変更を含むプログラムは次のとおりです。

struct Operation
{
    char op;
    double (*apply)(double, double);
}

Operation Make(char op, double (*apply)(double, double))
{
    Operation ret = {op, apply};
    return ret;
}

double add(double x, double y)
{
    return x + y;
}

Operation op_add = Make('+', add);
于 2012-07-29T09:30:56.423 に答える
0

あなたのビジョンがタスクと一致していないようです...

A)構造 char op;を「オブジェクト」にすることはできません。それは「価値」です、うーん...char *op;でも大丈夫かもしれませんか?

B)アレイ。

Operation* ret = new Operation; //is this a array?

いいえ。単一の値へのポインタを作成しました。

C)演算子。これは間違った構文です

(*ret) op = op;

これは大丈夫です

(*ret).op = op;

D)削除

void break(Operation& o)

構文が間違っているので、これで問題ありません

void BrakeObject(Operation*& o)
{
  delete o;
  o = NULL;
}
于 2012-07-29T09:33:12.767 に答える