假设我们有这段代码:
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;
}
即。多态运算符[]。
答案 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)
或类似的东西。