多态运算符[]实现

时间:2010-10-10 15:06:00

标签: c++

假设我们有这段代码:

class test_t
{
    void* data;
public:
    template <typename T>
    T operator [](int index)
    {
        return reinterpret_cast<T*>(data)[index];
    }
};

int main()
{
    test_t test;
    int t = test.operator []<int>(5);
    return 0;
}

有没有办法将其转换为可编译的惯用C ++?

应该看起来像

int main()
{
    test_t test;
    int t = test[5];
    double f = test[7];
    return 0;
}

即。多态运算符[]。

1 个答案:

答案 0 :(得分:7)

可以做的是返回代理对象

struct Proxy {
    template<typename T>
    operator T() {
      return static_cast<T*>(data)[index];
    }
    void *data;
    int index
};

Proxy operator [](int index)
{
    Proxy p = { data, index };
    return p;
}

您可以诉诸obj.get<T>(index)或类似的东西。