Мой класс имеет приватный enum
, члены которого используются для индексации массива строк, выходные данные которого записываются в выходной поток.
private:
enum supportedMessageTypes(CRITICAL = 0, WARNING, INFORMATION);
string messages[3];
//meanwhile, inside the constructor,
messages[3] = {"Critical error message",
"Warning message",
"Information message"};
Поскольку я буду часто использовать значения enum вокруг своего кода, я бы хотел иметь возможность перегрузить operator<<
, чтобы выполнить поиск значения enum, сопоставив его с соответствующей строкой в массиве и вернуть это следующим образом:
cout << CRITICAL << ": " << messageText << std::endl;
Проблема, с которой я столкнулся, заключается в том, что supportedMessageTypes
является закрытой, а перегрузка operator<<
должна выполняться как функция, не являющаяся членом. Я знаю, что могу определить функцию friend
, которая перегружает operator<<
для моего класса, но мне просто не удобно нарушать инкапсуляцию таким образом, и мне было интересно, если бы кто-нибудь знал о способе перегрузки operator<<
без использования friend
функции или сделать supportedMessageTypes
публичным?