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

Pass a type name to a templated operator

本文关键字:运算符 类型      更新时间:2023-10-16

我知道有一些问题与同一主题有关,但这一个问题要求更具体的内容。

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

  • 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的问题,即只有通过"显式"调用运算符才能做到这一点。

我的问题是,我如何解决这个问题,这样,如果我不能参数化通常的运算符调用,至少可以以不同的方式实现我想要实现的右值运算符[]

代码中可能重载了两个运算符。[]运算符和=运算符。您可以重载[]以向特殊类返回右值,然后根据该类是否出现在运算符的左侧或右侧来重载该特殊类的=