Я пишу изменяющийся во времени класс профиля с использованием шаблонов и хочу индексировать профиль либо по числовому индексу, либо по дате и времени, как это представлено в структуре tm. Индексация по числовому индексу работает нормально, но индексация по дате не работает с указателем на объект. Вот пример кода, который содержит подходы, которые работают, и подходы, которые не работают.
#include "profile.h" // Class Profile<T> is declared and defined here.
float f;
int i;
struct tm d;
Profile<float> p;
Profile<float> *pPtr;
// Non-pointer syntax
f = p[i]; // this works.
f = p.operator[](i); // this works, but its ugly.
f = p[d]; // this works.
f = p.operator[](d); // this works, but its ugly.
// Pointer syntax
f = (*pPtr)[i]; // this works.
f = pPtr->operator[](i); // this works, but its ugly.
f = (*pPtr)[d]; // this isn't what I typed. I did f = *(pPtr)[d];
f = pPtr->operator[](d); // this works, but its ugly.
Этот код C ++ пишется в Visual Studio 2008. Сообщение об ошибке компилятора является ошибкой C2677 двоичного файла '[': глобальный оператор не найден, который принимает тип 'tm' (или нет приемлемого преобразования).
Учитывая указатель на объект C ++, каковы все правильные способы вызова функции operator []?