Плохо ли перегрузить функцию по типу возврата?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Плохо ли перегрузить функцию по типу возврата?

Сообщение Anonymous »

C ++ не поддерживает перегрузку только по типу возврата, но вы можете смоделировать один, например, Как это: < /p>
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»