Тип переменной во время компиляции или выполнения?

137
23 марта 2018, 12:50

Здравствуйте, подскажите пожалуйста: почему в данной случае тип переменных i, j известен на этапе компиляции

template <int i, int j, class T>
auto to_pair(T tuple) -> decltype(std::make_pair(std::get<i>(tuple), std::get<j>(tuple)))
{
    return std::make_pair(std::get<i>(tuple), std::get<j>(tuple));
}

а здесь на этапе выполнения

template <class T>
auto to_pair(int i, int j, T tuple) -> decltype(std::make_pair(std::get<i>(tuple),
                                                               std::get<j>(tuple)))
{
    return std::make_pair(std::get<i>(tuple), std::get<j>(tuple));
}

Ну или может поделитесь ссылкой, где поподробнее про это написано.

Answer 1

Похоже, вы путаете тип и значение.

Типы i и j известны во время компиляции - это int.

А вот значения во второй функции действительно могут быть известны только во время выполнения. Поэтому этот шаблон и не работает - get требуется знать значение индекса во время компиляции.

READ ALSO
идентичность выражений

идентичность выражений

Хотелось бы узнать как будут отличаться производные классы, если эти два выражения не идентичны? Или все таки они идентичны?

198
Ошибка автоматического запуска chromedriver&#39;а

Ошибка автоматического запуска chromedriver'а

Несколько дней назад по необъяснимым мне пока причинам фоновая работа selenium'а (через Xvfb) стала сопровождаться автоматическим запуском экземпляра...

176
Узнать место на Sd-card или Внутренеей памяти Android

Узнать место на Sd-card или Внутренеей памяти Android

Узнать место на Sd-card или Внутренеей памяти Android какие методы?

190
Проверка входа на сайт

Проверка входа на сайт

ЗдравствуйтеНиже представлен код

151