В некоторых случаях необходимость явным образом задавать аргумент шаблона для возвращаемого значения может быть полезной. Например, можно реализовать «оператор» неявного преобразования таким образом:
template <typename RT, typename T> inline
implicit_cast(const T &t) { return RT(t): }
Вызов такого шаблона выглядит абсолютно так же, как и вызов стандартных операторов преобразования типа, например:
int а = 1;
float b = implicit_cast<float>(i):
Но правильно работает такое преобразование, естественно, только для разрешенных неявных преобразований.
Контрольные вопросы
Чистый виртуальный деструктор вкупе с простым открытым наследованием позволяют реализовать в языке однокоренную иерархию наследования. Во многих языках такая иерархия определяется в самом языке (Java» Однако в С++ не существует стандартной иерархии, поэтому она реализована во многих библиотеках, например в MFC и VCL. |