Вывод шаблона на основе типа возвращаемого значения функции в C
В C может быть желательно использовать вывод шаблона для упрощения кода, который создает экземпляры универсального функции на основе типов данных аргументов функции. Рассмотрим следующий пример:
GCPtr ptr1 = GC::Allocate();
GCPtr ptr2 = GC::Allocate();
Вместо того, чтобы явно указывать параметры универсального типа, цель состоит в том, чтобы добиться этого вывода, используя тип возвращаемого значения функции GC::Allocate(). Однако C не позволяет выводить тип на основе возвращаемого типа.
class GC
{
public:
template
static GCPtr Allocate();
};
Несмотря на то, что тип возвращаемого значения является универсальным, компилятор требует явного указания параметров типа шаблона и при создании экземпляра функции GC::Allocate().
Чтобы смягчить это ограничение, можно ввести вспомогательную функцию:
template
void Allocate(GCPtr& p) {
p = GC::Allocate();
}
Используя эту функцию, исходная цель может быть достигнута следующим образом:
GCPtr p;
Allocate(p);
Предлагает ли этот синтаксис какое-либо существенное преимущество перед явной спецификацией типа, вопрос субъективный.
Примечание: В C 11 можно опустить один объявлений типов с использованием ключевого слова auto:
auto p = GC::Allocate(); // p is of type GCPtr
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3