Предположим, у меня есть класс, как так (Обратите внимание, что это моделируется после Method Wrapper по Страуструпом:Автоматическое преобразование типа
template<class T>
struct Wrapper
{
private:
//This class is implicitly convertable to T&
struct TempRef
{
operator T&();
T& operator()();
~TempRef(); //Executes clean up code
};
struct TempPtr
{
T* operator T->();
~TempPtr(); //Executes clean up code
};
public:
TempRef operator*();
TempPtr operator->();
};
Цель этого класса для того, чтобы действовать как указатель на T
:
И это работает в некоторых случаях:
Wrapper<thing> var;
var->foo();
проблема возникает, когда я хочу, чтобы использовать его в качестве обертки для интегрального типа:
Wrapper<int> var;
//*var = 12; //Oops!! Does not work (no automatic conversion)
((int&)(*var)) = 12; //Works but the syntax is a pain
(*var)() = 12; //Good but still could be better
Таким образом, вопрос заключается в следующем:
Есть ли способ, чтобы сделать синтаксис для использования Wrapper
в качестве оболочки для интегрального типа таких же, как указатель на целочисленный тип, или это просто невозможно в данный момент?
Это не работает лучше для указателя. Вы тестируете две разные вещи. Попробуйте назначить обернутый указатель. – chris