【发布时间】:2021-05-17 18:55:49
【问题描述】:
假设我们有一个带有运算符 [] 的类,如下所示
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 或任何特定索引值的 [] 运算符的通用调用?关键是不能保证 operator [] 是为特定值定义的。如果可能,我们只需要提取TYPE。
换句话说,如果我们使用像std::vector<double> 这样的类,我们希望从该类中提取double。但没有进一步了解std::vector。我们唯一知道的是,其中有一个 [] 运算符的定义。
【问题讨论】:
-
是的(见答案),但请记住
std::vector已经定义了value_type。
标签: c++ templates types operator-overloading auto