Автоматическое создание экземпляров шаблонов на C++?C++

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

Сообщение Anonymous »

Кодовая база, над которой я сейчас работаю, сильно оптимизирована. В этом духе функции часто принимают аргументы шаблона bool или enum, а затем используют if constexpr для перехода по ним. Дело в том, что мы можем гарантировать, что в тесных циклах, где мы обрабатываем миллионы элементов, функция действительно имеет только тот код, который действительно необходим. Например:

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

template void foo(Items& items) {
if constexpr (use_filter) {
if (!filter(items)) return;
}
process(items);
}
Очевидно, что реальные функции гораздо сложнее, но приведенный выше пример демонстрирует, как это используется. Проблема в том, что теперь у нас есть код, который выглядит так:

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

  if (query.use_filter()) {
foo(items);
} else {
foo(items);
}
На самом деле все намного хуже, поскольку у нас часто есть несколько аргументов шаблона, поэтому if-лес становится довольно большим. Что интересно, так это то, что мне действительно хотелось бы написать foo(items). То есть каким-то образом указать C++ превратить значение времени выполнения в аргумент шаблона, автоматически реализовав ветвление. Да, это взрыв кода, но мы уже этим занимаемся. Для достижения этой цели можно использовать макросы (в некоторой степени), но это становится довольно быстро. Макросы лучше не использовать.
Вопрос: возможно ли это без макросов? Я знаю, что это возможно с помощью макросов.

Подробнее здесь: https://stackoverflow.com/questions/784 ... ation-in-c
Ответить

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

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

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

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

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