Вывод параметров шаблона в зависимости от использованияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вывод параметров шаблона в зависимости от использования

Сообщение Anonymous »

Это вопрос о несуществующей функции C++, для которой, основываясь на моем описании, я хотел бы знать, обсуждались ли такие идеи для языка C++ или существуют ли такие идеи в других языках.
Часто мне приходилось выполнять повторяющуюся работу по добавлению параметров шаблона в std::variant или std::tuple, чтобы соответствовать требованиям, предъявляемым кодом, использующим их экземпляры. Поэтому мне было интересно, можно ли вывести параметры шаблона не только при вызове конструктора, но и на основе вызовов объектов. Например

Код: Выделить всё

#include 
#include 
int main(){
using MyInferredTuple = std::tuple;
MyInferredTuple t;
t.get() = 2;
return t.get().length() + t.get();
}
В этом примере я использовал псевдокод `std::tuple` для указания типа кортежа, который выводит аргументы типа шаблона.
Возвращаемое значение функции main() будет равно 2, потому что std::string по умолчанию будет создан в строке MyInferredTuple t;, а MyInferredTuple будет std::tuple.
Я знаю, что у этой идеи есть некоторые ограничения и нерешенные проблемы, а именно:
  • Используемые типы должны иметь конструктор по умолчанию.
  • Не всегда возможно определить порядок выводимых типов, поэтому останется неупорядоченный набор типов, которые невозможно канонически сопоставить с набор упорядоченных типов аргументов шаблона.
  • При использовании в разных единицах перевода потребуется найти все случаи использования, прежде чем можно будет определить фактический тип шаблонного типа MyInferredType.
  • Идентификация одного и того же выведенного типа в разных TU, а также в пределах одного TU потребует предварительного присвоения имени, как это сделано здесь, обозначено с помощью для различать разные выводимые типы, поэтому на самом деле использование было бы неправильным ключевым словом, для него потребовалось бы новое ключевое слово.
Несмотря на эти проблемы, очевидно, я, вероятно, не первый, кто подумал о такой функции, которая могла бы пригодиться, особенно для std::variant в контексте отправки данных в другой поток.
Мне хотелось бы узнать об исходной информации и обсуждении такого использования вывод типов шаблонов на основе C++ и вообще.

Подробнее здесь: https://stackoverflow.com/questions/798 ... d-on-usage
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»