从重载的operator [](模板?)返回不同的类型

时间:2014-10-28 04:15:11

标签: c++ templates

我有一个需要使用operator[]来访问其数据的集合类,但是返回的数据可以是多种不同的类型(从基类派生)。有没有办法使用模板甚至其他一些不同的方式来重载operator[]返回不同的类型。如果可能的话,非常感谢示例或代码片段。

2 个答案:

答案 0 :(得分:1)

也许你正在寻找像这样的东西

#include <vector>
#include <iostream>

template<typename ElementType>
class SpecialCollection
{
public:
    SpecialCollection(int length)
        : m_contents(length)
    {}
    ElementType& operator[](int index)
    {
        return m_contents[index];
    }
private:
    std::vector<ElementType> m_contents;
};

// Example usage:
int main()
{
    SpecialCollection<int> test(3);
    test[2] = 4;
    std::cout << test[1] << " " << test[2] << std::endl;

    return 0;
}

看看这段代码,我问自己:为什么不用std::vector?但也许你想在operator[]()方法中做更多的事情。

答案 1 :(得分:1)

听起来你可以使用尾随的返回类型演绎,但我可能会完全误解你。

auto operator[](int i) -> decltype(collection[i]) {
   return collection[i];
}

然后编译器推断出返回类型,但是,当然,你不能返回变量类型(在运行时)。就像你不能(安全地)将它们存储在一个集合中一样