有没有一种方法可以识别c++中重载运算符[]的类
Is there a way how to identify class of overloaded operator[] in c++?
假设我们有一个带有运算符[]的类,如下
class MyClass
{
//...
public:
TYPE operator[](const size_t idx) const
{
//... Implementation
}
}
现在我想读取TYPE
,并将其用作另一个类的模板参数。可以使用技巧
template<class T>
class OtherClass
{
//...
}
template<class T>
auto generator(const T& element)
{
return OtherClass<T>();
}
int main(void)
{
MyClass myclass;
auto resulted_class = generator(myclass[0]);
return 0;
}
这应该从MyClass
创建一个具有模板TYPE
的OtherClass
,并将其复制到resulted_class
中。
现在是问题。对于索引值0或任何特定的索引值,是否可以实现相同但不通用调用[]运算符的结果?重点是不能保证运算符[]是为特定值定义的。如果可能的话,我们只需要提取TYPE
。
换句话说,如果我们使用像std::vector<double>
这样的类,我们希望从该类中提取double
。但对CCD_ 9没有进一步的了解。我们唯一知道的是,里面有一个[]运算符的定义。
是:
using T = std::decay_t<decltype(myclass[0])>;
不计算decltype
内部的表达式。事实上,您不需要一个实例:
using T = std::decay_t<decltype(std::declval<MyClass>()[0])>;
参见std::decay
、decltype
和std::declval
相关文章:
- 继承函数的重载解析
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 重载操作程序时出错>>用于类中的字符串 memebr
- 一个关于在C++中重载布尔运算符的问题
- 不同翻译单元中不可重载的非内联函数定义
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 将重载的成员函数传递给函数模板
- c++:可变模板和函数重载
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 重载==不适用于二进制树
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符new[]的行为取决于析构函数
- 正在尝试重载二进制搜索树分配运算符
- 重载Singly Linked List中的赋值运算符
- 取消引用运算符不能重载