2

次のような小さなラッパークラスを作成しようとしています

template <typename T>
class EdgeTriggeredState

{

public:
    void Tick()
    {
        oldData = newData;
    }

    EdgeTriggeredState& operator =(const T& v)
    {
        newData = v;
        return *this;
    }

//  T& operator = (void)
//  {
//      return oldData;
//  }

//  T& operator T()
//  {
//      return oldData;
//  }

private:
    T oldData;
    T newData;
};

基本的に、クラスによってラップされた値を T 型の変数に直接代入できるようにしたいと考えています。(T 型への) 代入演算子と T 型へのキャスト演算子の両方を実装しようとしました。C だけで作業しているため、C++ には少し慣れていません。名前付きゲッターメソッド?

最初の実装試行のコメントを外すと、エラーが発生します

"../EdgeTriggeredState.h:19:21: エラー: 'T& EdgeTriggeredState::operator=()' は 1 つの引数を取る必要があります"

2 番目の実装のコメントを外す (そして最初の実装をコメント アウトする) と、エラーが発生します。

"../EdgeTriggeredState.h:24:16: エラー: 'operator T' に指定された戻り値の型"

4

1 に答える 1

10

を記述するoperator T場合、戻り値の型は暗黙的であるため、コードは次のようになります。

template <typename T>
class DumbWrapper {
    T oldData;
    T newData;
public:
    DumbWrapper& operator = (const T& val) {
        newData = val;
        return *this;
    }

    operator T() {
        return oldData;
    }
};

[末尾のセミコロンと、コンストラクターと変換演算子がおそらくpublic であることを意図していたという事実にも注意してください。]

于 2013-06-18T02:29:35.657 に答える