我知道有相同主题的问题,但这个问题要求更具体。
我正在创建个人使用的多类型模板化容器。细节并不重要,但这里是我想在我的容器中使用的基本运算符:
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++ - 将类型名称传递给模板化运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41755183/