Мне нужен класс-оболочка для указателей, который действует так же, как необработанный указатель, но также сохраняет специальное целое число вместе с указателем (индекс типа в массиве, из которого он получен)
Мне удалось заставить его вести себя в основном как указатель. Я знаю, что решение для сравнения указателей может быть неоптимальным, но это не моя главная проблема.
Я хочу, чтобы обертка была построена с 2 параметрами (указатель, indexToArr), если указатель не равен NULL - тогда меня не волнует indexToArr.
Проблема, которую я пытаюсь решить, состоит в том, как разрешить возврат NULL, как позволяет обычный указатель.
Текущее решение использует ASSERT. Но я хочу что-то, что работает во время компиляции. что-то в духе специализированного шаблонного метода - в качестве аргумента допускается только NULL.
Текущая версия:
class PtrWrapper
{
public:
PtrWrapper(Type* ptr, int indToArr)
: m_ptr(ptr), m_indexToArr(indToArr){}
//allow returning NULL, only NULL
PtrWrapper(Type* ptr) : m_ptr(NULL), m_indexToArr(-1) {ASSERT(ptr == NULL);}
Type* operator->() const {return m_ptr;}
Type& operator*() const {return *m_ptr;}
int IndexToArr() const {return m_indexToArr;}
//for pointer comparison
operator Type*() const {return m_ptr;}
private:
Type* m_ptr;
int m_indexToArr;
};
Есть идеи, предложения?
Спасибо,
Leo