Typecast泛型类型C ++

时间:2014-03-28 05:19:40

标签: c++ generics casting

我为operator[]类重载DataStructure以返回指示的值,如下所示:

T& operator[](int i) {
    return m_array[i];
}

但是当我循环遍历值时,我想按如下方式打印它们:

for (int i = 0, s = stack->size(); i < s; ++i) {
    printf("%7i %5i\n", i, stack[i]);
}

因为我将通用DataStructure创建为整数Stack(派生类)

stack = new Stack<int>(STACKSIZE);

但这不起作用。我希望堆栈中的每个项都是int,但是编译器说我不能将Stack<int>强制转换为int,即使我没有尝试对栈进行类型转换!!!

我错过了什么?另外,我不能使用

printf("%7i %5i\n", i, (int)stack[i]);

由于某种原因,它“不是”整数类型。

1 个答案:

答案 0 :(得分:7)

如果stack是指向Stack<int>的指针,则stack[i]不会调用堆栈的operator[]。它将指针视为指向数组第一个元素的指针,并尝试索引到该数组。不要把它变成指针:

Stack<int> stack(STACKSIZE);

或取消引用指针:

(*stack)[i]