-2

<<ユーザー定義のデータ型を SystemC チャネル テンプレートに渡すには、これらのデータ型を、さまざまな種類の演算子も実装するクラスとして定義する必要があり=ます==

sc_fifo次のように定義する必要があります。

sc_fifo<route_t>

これを正しく行うには、route_tデータ型を次の例のように記述する必要があります。

class route_t
{
    public: 
    route_dir_t                     route_dir; 
    unsigned int                    vc_index; 

    // methods allowing the structure to be passed into SystemC channels
    // constructor
    route_t(route_dir_t _route_dir, unsigned int _vc_index) {
        route_dir = _route_dir; 
        vc_index  = _vc_index; 
    }

    inline bool operator == (const route_t& _route) const {
        return (route_dir == _route.route_dir && vc_index == _route.vc_index); 
    }

    inline route_t& operator = (const route_t& _route) {
        route_dir = _route.route_dir; 
        vc_index  = _route.vc_index; 
        return *this; 
    }

}; // end class route_t 
  1. SystemC がそのような実装を必要とするのはなぜですか?
  2. operator=オブジェクト自体への参照を返す必要があるのはなぜですか? 内部メンバーを更新するだけです。
  3. struct必要な演算子を実装する内部メソッドを使用して、代わりにデータ型を a として定義できますか?
  4. なぜinlineこの文脈で使われるのですか?
  5. メソッドの宣言で期待されるように、返すことはオブジェクトへの参照を返すこととどのよう*thisに同等でしょうか?
4

2 に答える 2

0

operator=クラス自体への参照を返すことが期待されるため、次のいずれかを実行できます。

a = b = c;
if (a = b) { } // check the resulting value of a
(a = b).foo();

これらは期待どおりの動作ではないかもしれませんが、ユーザー定義オブジェクトを組み込みオブジェクトの動作と同じように動作させるという一般的なガイドラインに従っています。

参照を返すことに関しては、ローカル オブジェクトへの参照を返さないことを確認する必要がありますが、期待されるセマンティクスがあります。

于 2015-06-14T13:11:42.823 に答える