0

どうすれば機能するようにオーバーロードできob2[0][0] << 112.6ますか? 現在、この操作に挿入機能を使用しています。

template <class X>
class A
{
    void insert(int row, int col, type val)
    {
        ...
    }
};

template <class Y>
class B
{
    vector<int> row;
    vector<vector<pair<int, Y> > > colval;
}

int main()
{
    B<float> ob1;
    A<B<float> > ob2;
    ob2[0][0] << 112.6;
}
4

2 に答える 2

1

プロキシ オブジェクトを使用します。

class A
{
    // provide operator << for a single row/column
    struct cell_proxy
    {
        void operator<<(float value) const
        {
            target->insert(row, col, value);
        }

        A* target;
        size_t row;
        size_t col;
    };

    // provide access to elements of a single row
    struct row_proxy
    {
        cell_proxy operator[](size_t col)
        {
            cell_proxy res = {target, row, col};
            return res;
        }

        A* target;
        size_t row;
    };

    row_proxy operator[](size_t row)
    {
        row_proxy res = {this, row};
        return res;
    }
};

そうは言っても、演算子のオーバーロード、プロキシ、およびテンプレートを喜んで使用できますが、コードを判読不能およびデバッグ不能にすることもできます。個人的には、insert() 呼び出しの方がはるかに読みやすいと思います。

于 2013-04-27T06:45:29.770 に答える