枚举类型的过度限定

时间:2015-09-18 23:54:47

标签: c++ templates enums

在此代码中

template<typename ValueT, typename ErrorT = bool>
class ValueOrError
{
private:
    enum class State
    {
        Undefined, OK, EndOfFile, InError
    };
public:
    ........
    template<typename U>
    static ValueOrError
    copyProblem(const ValueOrError<U, ErrorT>& other)
    {
        ValueOrError result;

        result.error_ = other.error_;
        result.state_ = other.state_;
        // result.state_ = static_cast<State>(other.state_);
        return result;
    }

private:
    template<typename U, typename E>
    friend class ValueOrError;

    State  state_;
    ValueT value_;
    ErrorT error_;
};

g ++ 4.8.3在状态分配时给出错误。它抱怨 无法分配类型ValueError<U>::State的值 对于不同的U和T,为ValueError<T>::State类型的值 静态演员绕过这个。有没有更好的方法 做这个?状态类型显然不随模板而变化 参数。

1 个答案:

答案 0 :(得分:2)

这是一种方式:

struct State
{
    enum Enum{ Undefined, OK, EndOfFile, InError };
};

template< class ValueT, class ErrorT = bool>
class ValueOrError
    : private State
{
public: