ИМХО, написание оператора неявного преобразования (как предложил 0x499602D2) - это не лучший идея.
Например, предположим, что у вас есть два отдельных файла примерно так:
//File char_utils.hh
#include <iostream>
void accept(char character) { std::cout <<"character: " <<character <<'\n'; }
//File elements_utils.hh
#include <iostream>
void accept(Element const& element) {
std::cout <<"element.getVal(): " <<element.getVal() <<'\n';
}
Затем, в зависимости от того, что вы включаете в файл реализации (char_utils.hh
или elements_utils.hh
), вы получите различное поведение, которое может привести ко многим тонким ошибкам и / или интересным поведениям. ;)
Это можно преодолеть, объявив оператор преобразования explicit
, т.е.
explicit operator char() const { return val; }
В таком случае вам просто нужно:
Element e{'x'};
char c = static_cast<char>(e);
, который показывает намерение более четко.
Однако, зачем вам вообще нужно использовать неявное преобразование? Особенно, когда вы можете использовать Element::getElement()
? И если я могу предложить, я бы использовал другой namin, например, Element::getValue()
. Element::getElement()
очень сбивает с толку.
Дальнейшее чтение: https://stackoverflow.com/a/16615725/1877420