gsrunion
gsrunion

Reputation: 409

Template cast operator C++

I am trying to make a little wrapper class such as

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;
};

Basically I want to be able to directly assign to a variable of type T the value wrapped by the class. I have tried implementing both an assignment (to type T) operator and a cast operator to type T. I am a bit rusty on my C++ as I have been working solely in C. Is there a way to go about implementing this without creating a named getter method?

When I uncomment the first implementation attempt I get error

"../EdgeTriggeredState.h:19:21: error: ‘T& EdgeTriggeredState::operator=()’ must take exactly one argument"

When I uncomment the second implementation (and comment out the first) I get error:

"../EdgeTriggeredState.h:24:16: error: return type specified for ‘operator T’"

Upvotes: 2

Views: 3848

Answers (1)

Jerry Coffin
Jerry Coffin

Reputation: 490098

When you write an operator T, the return type is implicit, so your code should look something like:

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

    operator T() {
        return oldData;
    }
};

[Also note the semicolon at the end, and the fact that the constructor and conversion operator were probably intended to be public.]

Upvotes: 10

Related Questions