0. Это вообще довольно известная штука, но я о ней не писал, так что поделюсь.
Когда вы учите C++, вам говорят, что возвращаемое значение на перегрузку не влияет. Но это не значит, что нельзя использовать силу рук, чтобы намутить такое. Мы же всё-таки на C++ пишем☺️
Пусть есть две функции, которые отличаются только возвращаемым значением:
int process(std::string s);
bool process(std::string s);Мы хотим, чтобы следующий код заработал:
int i = process(some_string);
bool b = process(some_string);Нам поможет вот такая замечательная структура:
struct converter {
std::string s;
operator int() const;
operator bool() const;
};у которой операторы приведения типа как раз совершают необходимую логику, соответствующую функциям
process. Тогда наш код превращается в int i = converter{some_string};
bool b = converter{some_string};Ну или можно сделать немножко аккуратнее и написать общую функцию, чтобы детали реализации не висели наружу:
converter process(std::string s) {
return converter{s};
}
int i = process(some_string);
bool b = process(some_string);И ссылочки.
1. Unexpected downsides of UUID keys in PostgreSQL.
2. Big Data is Dead. Статья прикольная, потому что идёт вразрез с моим мироощущением, где данных очень много и рано или поздно это начнёт приносить проблемы.
3. Goodbye, Clean Code.