【问题标题】:Pass a type name to a templated operator将类型名称传递给模板化运算符
【发布时间】:2017-01-20 02:37:11
【问题描述】:

我知道有相同主题的问题,但这个问题要求更具体的问题。

我正在创建一个个人使用的多类型模板化容器。细节并不重要,但以下是我想在容器中使用的基本运算符:

  • 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 上读到一个问题,只有通过“显式显式”调用运算符才能做到这一点。

我的问题是,我该如何解决这个问题,以便如果我不能对通常的运算符调用进行参数化,至少要以不同的方式实现我的右值运算符 [] 以实现我想要实现的目标?

【问题讨论】:

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


    【解决方案1】:

    您的代码中可能会重载两个运算符。 [] 运算符和 = 运算符。您可以重载 [] 以将右值返回给特殊类,然后根据该类出现在运算符的左侧还是右侧,为该特殊类重载 =

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      相关资源
      最近更新 更多