将类型名称传递给模板化运算符
Pass a type name to a templated operator
我知道有一些问题与同一主题有关,但这一个问题要求更具体的内容。
我正在创建一个个人使用的多类型模板容器。细节并不重要,但以下是我想在容器中使用的基本运算符:
-
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的问题,即只有通过"显式"调用运算符才能做到这一点。
我的问题是,我如何解决这个问题,这样,如果我不能参数化通常的运算符调用,至少可以以不同的方式实现我想要实现的右值运算符[]
代码中可能重载了两个运算符。[]
运算符和=
运算符。您可以重载[]
以向特殊类返回右值,然后根据该类是否出现在运算符的左侧或右侧来重载该特殊类的=
。
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- JS相等运算符(如===)是否可以使用embind类型
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 将所有模板类型传递给运算符,而不指定所有类型
- 标准库类型的赋值运算符的引用限定符
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 如何确保接受的C++模板类型使运算符重载?
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- C2679 二进制"<<":未找到采用右操作数类型的运算符
- 使用类型id运算符的最佳替代方法
- c++ 错误:二进制"运算符+"类型"矩阵*"和"矩阵*"的操作数无效
- C 中的运算符(::类型*)0表示什么意思
- 从类模板中排除转换运算符...<类型名 T>基于 T 上的特征
- 初始化中的模板转换运算符类型推导规则是什么?
- 重载运算符类型
- clang和gcc中的模板转换运算符类型推导不同
- 将运算符类型转换为除某些引用之外的任何算术类型
- 返回运算符类型=-引用或值
- VS 2012中的条件运算符类型转换
- 获取CXCursor_BinaryOperator的运算符类型