Арифметический тип прокси

Фон

Я работаю над классами отображения JSON в C ++ 11, чтобы представить синтаксически интуитивно понятные и безопасные объекты, которые могут сериализоваться / десериализоваться в представление JSON.

Вопрос

Мне нужно предоставить хороший прокси для арифметических типов (в основном для int, unsigned, float, double). Как реализовать такую ​​вещь? Первая идея — реализовать класс шаблона, перегружающий все арифметические, побитовые и операторы сравнения. Но какую перегрузку я должен написать, чтобы избежать ненужной работы? Как насчет операторов приведения? Какой должен быть тип возврата operator+?

Простая неполная реализация, показывающая идею:

template <typename T>
class Proxy {
T mValue;
public:
Proxy(T value = T()) : mValue(value){}

//Should it be defined like this...
Proxy &operator+=(T value) {
mValue += value;
return *this;
}

//Or maybe like this...
template <typename U>
Proxy &operator+=(U &&value) {
mValue += std::forward<U>(value);
return *this;
}

//Should this return T or Proxy<T>?
T operator+(T value) {
return mValue + value;
}//Is it necessary?
operator T() const {
return mValue;
}

//...
};

альтернатива

Но я должен реализовать примитивные поля JSON в качестве прокси-классов? Может быть, есть лучший способ. Например, я также рассматриваю возможность сделать внутреннюю ценность общедоступной, поэтому вместо записи:

json.intField += 4;

пользователь должен будет написать

json.intField.value += 4;

Этот синтаксис не настолько интуитивен и понятен, как хотелось бы, но это тоже вариант.

Для всех, кто говорит мне, как реализовать JSON в C ++ — это не мой вопрос! Прокси-шаблон имеет более широкое использование!

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]