Выберите аргумент шаблона во времени выполнения в C++

Предположим, что у меня есть ряд функций и классов, которые являются шаблонными для использования единственный (float) или double точность. Конечно, я мог записать всего две части кода начальной загрузки или смешать с макросами. Но я могу просто переключить аргумент шаблона во времени выполнения?

9
задан Andrew T 3 March 2009 в 22:04
поделиться

3 ответа

Нет, Вы не можете переключить аргументы шаблона во времени выполнения, так как шаблоны инстанцирует компилятор во время компиляции. То, что можно сделать, имеют оба шаблона, происходят из общего базового класса, всегда используют базовый класс в коде и затем решают который производный класс использовать во времени выполнения:

class Base
{
   ...
};

template <typename T>
class Foo : public Base
{
    ...
};

Base *newBase()
{
    if(some condition)
        return new Foo<float>();
    else
        return new Foo<double>();
}

Макросы имеют ту же проблему как шаблоны, в которых они расширены во время компиляции.

20
ответ дан 4 December 2019 в 08:35
поделиться

Шаблоны являются просто конструкцией времени компиляции, компилятор развернет шаблон и создаст Ваш класс/функцию с указанным аргументом и непосредственно переведет это для кодирования.

При попытке переключиться между foo<float> и foo<double> во времени выполнения необходимо будет или использовать некоторый обман метапрограммирования или просто иметь отдельные пути выполнения кода для каждого.

2
ответ дан 4 December 2019 в 08:35
поделиться

Шаблоны являются механизмом времени компиляции. BTW, макросы также (строго говоря - механизм предварительной обработки - который прибывает даже перед компиляцией).

3
ответ дан 4 December 2019 в 08:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: