Я хотел бы написать шаблон, который получит в качестве параметра возвращаемый тип функции, в которой он создается.
Например, предположим, что у меня есть шаблон Result
templated:
template<type T>
class Result {
T _result_value;
T& operator=( T that );
~Result( );
}
Для этого класса будет несколько специализаций. В деструкторе я хотел бы записать возвращаемый тип, и в рамках назначения operator=
я хотел бы проверить и утвердить значения ошибок.
В идеале я хотел бы иметь такое определение:
#define RESULT Result< /* decltype magic for type of current function */ >
чтобы я мог использовать его:
HFILE MyOpenFile( ... ) {
RESULT result;
}
..., который будет выведен на Result<HFILE>
. Это упрощенный пример: запись Result
вместо Result<HFILE>
не имеет большого значения, но есть и другие сценарии, где возвращаемый тип текущей функции нелегко получить.