В C ++ я иногда получаю служебные классы, подобные этим:
struct time_ref
{
time_ref(FILETIME & ft) : ftval(&ft), ttval(0) {}
time_ref(time_t & tt) : ttval(&tt), ftval(0) {}
FILETIME * ftval;
time_t * ttval;
}
Они полагаются на импровизированные преобразования, например, чтобы уменьшить количество перегрузок:
void Foo(int x, int y, time_ref t)
Обоснование: еслиУ Foo
есть другой параметр с перегрузками, умножение прототипов, например, 3 перегрузки для X * 2 перегрузки для t - это 6 прототипов, по сравнению с 3 с вышеуказанным преобразователем (или даже один, если используются два преобразователя).
Они всегда:
- имеют неявные конструкторы для двух типов или типов mroe
- должны использоваться только в качестве параметров функции для включения этих преобразований
Thyeотличаются:
- Количество поддерживаемых типов
- может хранить значение или ссылку
- на то, как вызываемый объект определяет, какой тип был предоставлен (в приведенном выше случае,это ненулевой указатель. Другой типичной реализацией является поле enum и объединение значений данных)
Вопросы:
1.Существует ли общепринятое / общепринятое имя для этого шаблона? Я обычно называю их «преобразователь аргументов» или «адаптер аргументов», что не кажется распространенным
2.любые рекомендации по их формализации - например, есть ли способ (помимо добавления комментария, говорящего так), чтобы гарантировать, что они используются только в качестве параметров?Любые другие вещи, которые нужно знать?