Передача constexpr std::pair в функцию

205
18 декабря 2017, 14:32

Я могу создать:

constexpr auto pair = std::make_pair(1, 2);

Но как передать её в функцию? Следующие способы не работают:

template<std::pair<int, int> pair>
void foo() {
constexpr int a = pair.first;
}
void foo(const std::pair<int, int>& pair) {
constexpr int a = pair.first;
}
Answer 1

Это вас не устроит?

constexpr auto p = std::make_pair(1, 2);
constexpr void foo(std::pair<int, int> pr)
{
    int a = pr.first;
}
constexpr void poo(std::pair<int, int> pr)
{
    constexpr int a = p.first;
}

int main(int argc, const char * argv[])
{
    foo(p);
    poo(p);
}

Просто смотрите - вы хотите на уровне компиляции определить значение локальной переменной a, которая в общем случае определяется аргументом функции времени выполнения. Если вы ее хотите определить через глобальную consexpt переменную - это дело другое...

Update

Пару вариаций:

constexpr auto p = std::make_pair(1, 2);
constexpr auto foo(const std::pair<int, int>&  pr)
{
    int a = pr.first;
    return a;
}
constexpr auto goo(std::pair<int, int>  pr)
{
    int a = pr.first;
    return a;
}
constexpr auto x = foo(p);
constexpr auto y = goo(p);

Update2

Раз нужен именно шаблон... - https://ideone.com/lgf5Cn (правда, VC++, даже 2017, это еще не научился делать).

constexpr auto p = std::make_pair(1, 2);

template<const std::pair<int, int>& pr>
void zoo()
{
    constexpr int a = pr.first;
}
int main(int argc, const char * argv[])
{
    zoo<p>();
}

Какие еще будут пожелания?

READ ALSO
использовать функцию из библиотеки

использовать функцию из библиотеки

здравствуйте, есть примерно следующий код:

213
Arduino использовать методы одной библиотеки в другой

Arduino использовать методы одной библиотеки в другой

Прошу вас объяснить или же указать на источник где можно подробно прочитать способ использования одной библиотеки Arduino в другойВ частности,...

252
Способы передачи файла через компорт(Comport, rs232)

Способы передачи файла через компорт(Comport, rs232)

Здравствуйте, необходимо реализовать передачу файла на comportОбъясните, пожалуйста, если компорт ведет дело с байтами, то задача "Передать...

149
Размер папки в Qt [дубликат]

Размер папки в Qt [дубликат]

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

209