Я хочу перегрузить оператор присваивания для типов, таких как "int", "long" и т. Д. То есть я хочу использовать код, подобный:
class CX {
private:
int data;
...
};
CX obj;
int k;
k = obj; // k should get the value of obj.data
Очевидно, что операторы присваивания не могут быть дружественными функциями. Как мне достичь вышеуказанного?
Я, возможно, упускаю что-то простое, но просто не могу понять синтаксис / метод, чтобы сделать это.
Кроме того, есть одно ограничение IMP - мы НЕ МОЖЕМ использовать методы get / set, потому что:
В коде выпуска у нас будет тип CX определен как int или long (как требуется), но в коде DEBUG мы хотим иметь его как класс (для автоматической проверки типов в тысячах мест). Код должен быть общим.
Причина в том, что компилятор (по крайней мере, версия, которую мы используем) каким-то образом не способен оптимизировать все операции, если CX сделан классом.
Одна проблема - я не хочу, чтобы это прошло:
CX x; long p; p = x;
Я предполагаю, что приведенное ниже решение неявно выполнит код для длинных / коротких и т. Д. Тоже.
(Если нет, то это именно то, что я ищу!).
В соответствующей заметке, отвечая на вопрос Дэвида - причина, по которой я хочу провести рефакторинг, - мы хотим, чтобы возможность переключения CX была 32-битной или 64-битной. Поэтому мы хотим запретить любые неявные преобразования и перехватывать их во время компиляции. Теперь наоборот - (disallowiong
CX x = some_64_bit_int;
но допускается
CX x = some_32_bit_int;
Я добился этого с помощью оператора templatized =, который по умолчанию устанавливает время компиляции, но перегружает его для нужного мне типа.
В случае, если вы считаете, что это плохой дизайн или я должен попробовать другие альтернативы - причина, по которой мне это нужно, заключается в следующем: у нас есть тысячи строк устаревшего кода, где что-то просто определено как «int» .
typedef int CX;
Есть повсюду задания, такие как:
CX x; int k; k = x; // Writing the simplified relevant code here
Я работаю над проектом по изменению CX на класс. На первом этапе мы хотим исправить все ошибки компиляции (которые делают CX классом), внося как можно меньше изменений в код.