class foo {
public:
// returns some kind of a specific resource on assignment time
auto resource () {
struct overloader {
operator resource_type_1* () {
return f->resource_1;
}
operator resource_type_2* () {
return f->resource_2;
}
// etc.
foo* f = nullptr;
};
return overloader {this};
}
private:
resource_type_1* resource_1;
resource_type_2* resource_2;
// etc.
};
< /code>
Так что вам не нужно писать отдельный Getter для каждого ресурса, который у вас есть. Позже где -то в вашем коде у вас может быть что -то вроде этого: < /p>
resource_type_1* resource_1 = f->resource();
resource_type_2* resource_2 = f->resource();
< /code>
То, что он делает, это создает и возвращает структуру, в которой есть операторы кастинга, которая возвращает определенный ресурс в зависимости от типа назначения. Более того, если у вас нет оператора кастинга до какого -то конкретного типа, вы получите ошибку времени компиляции, которая, как я найду, довольно аккуратно. < /P>
- Взятие Во внимание, чем C ++ не поддерживает перегрузку по типу возврата по дизайну, пытается реализовать одну, считающуюся плохой практикой? Плохо в любом случае (неоправданная сложность кода может вызвать неявные ошибки и т. Д.)? Есть ли другие (возможно, лучше) методы?
Подробнее здесь: https://stackoverflow.com/questions/794 ... eturn-type
Мобильная версия