我有一个类或结构,比方说, Container ,具有以下结构:
template <typename type> struct Container {
vector <type *> v;
...
functions
...
type* operator[] (int i) { // not sure about this
return (v)[i];
}
};
其中type可以是标准类型或自定义类或结构。
这个结构应该像这样工作:
Container<type> * c(10);
c->function(); // calls a function that iterates over the elements of v
如果我想访问向量的各个元素,我可以调用
c->v[0]->function()
其中function是 type 类的成员; 这有点像预期的;但是,它可以简化为
c[0]->function()
由于我定义的[]运算符,将返回指向包含类的指针而不是容器本身,但编译器仍然抱怨容器类没有名为&#的成员34;功能&#34 ;. 这不是一个大问题,可以通过不同的语法轻松避免,但让我觉得我对指针和引用如何工作有一些基本的误解。 在这里定义[]运算符的正确方法是什么?我错过了什么? 提前谢谢
编辑:我编辑了问题以反映我的实际代码
答案 0 :(得分:0)
您的operator[]
似乎没问题。你的结构名称后似乎缺少一个分号。
是。编译器告诉我Container没有成员函数,而不是类型。
您是否为Container
定义了一个函数?
这是一个编译的工作示例:
#include <iostream>
#include <vector>
struct A
{
void Function () {
std::cout << "A::Function()" "\n" ;
}
};
template <typename type> struct Container {
std::vector <type *> v;
void Function () {
std::cout << "Container::Function ()" "\n" ;
}
type* operator[] (int i) {
return (v)[i];
}
};
int main (void)
{
A a ;
Container <A> c ;
c.Function () ;
c.v.push_back (&a) ;
c[0]->Function () ;
return 0 ;
}
输出:
Container :: Function()
A ::功能()
<强>更新强>
以下是使用指针的示例。
int main (void)
{
A a ;
Container <A> *pC = new Container <A> ;
pC->Function () ;
pC->v.push_back (&a) ;
(*pC) [0]->Function () ;
delete pC ;
return 0 ;
}
当然,你永远不必使用像这样的原始指针。您可以使用smart pointers代替,也可以将内存包装到RAII的类中。