将类型名称传递给模板化运算符

时间:2017-01-20 02:37:11

标签: c++ templates operator-overloading implementation rvalue

我知道同一主题存在问题,但是这个问题需要更具体的内容。

我正在创建一个个人使用的多型模板容器。细节并不重要,但这里是我想用于容器的基本操作符:

  • obj[n]返回自己的类型,以便它可以用于分配obj[n]=value;中的值(作为左值)

  • 重载obj[n],返回存储在"数组中的检索值"如something=obj[n];(作为右值)

第二个重载运算符是我想谈的那个。

使用极少数示例,这是我班级的基本外观:

template <typename T1, typename T2>
class example
{
    /*some private and public definitions*/

    example<T1, T2>& operator[] (int n)
    {
        current = n;
        return *this;
    }

    template <typename U>
    U operator[] (int n)
    {
        /*some operations*/

        return something;
    }
};

问题是,我想参数化重载运算符的返回值。

我在这里读了一个问题,在stackoverflow上,只有通过调用运算符&#34;明确地明确&#34;才能做到这一点。

我的问题是,如何解决这个问题,这样如果我不能参与通常的操作员调用,至少要实现我的rvalue操作符[],以实现我想要实现的目标。可能吗

1 个答案:

答案 0 :(得分:1)

您的代码中可能会有两个运算符重载。 []运算符和=运算符。您可以重载[]以将rvalue返回到特殊类,然后为该特殊类重载=,具体取决于该类是出现在运算符的左侧还是右侧。