«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Может ли C++ выводить типы шаблонов из типов возвращаемых функций?

Может ли C++ выводить типы шаблонов из типов возвращаемых функций?

Опубликовано 10 ноября 2024 г.
Просматривать:214

Can C   Deduce Template Types from Function Return Types?

Вывод шаблона на основе типа возвращаемого значения функции в 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