Вопросы

Явное расщепление массива на указатель

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


Например, рассмотрим случай, когда вам нужно иметь возможность направлять SFINAE или явно указывать перегрузку:

template<typename T, std::size_t N> void foo(T(&x)[N]);
template<typename T>                void foo(T *x); 
//
int x[2] = {0, 1};
foo(x);

Может быть, с унарным плюсом?   —  person mockinterface    schedule 11.04.2014

Что ты спрашиваешь? Приведенный выше код не является двусмысленным.   —  person mockinterface    schedule 11.04.2014

@juanchopanza Ты пробовал? Я согласен, что это странно, но оба являются точными совпадениями.   —  person mockinterface    schedule 11.04.2014

@dyp Я пробовал. Первый вариант лучше подходит. Или мой компилятор (gcc 4.7.3) не работает?   —  person mockinterface    schedule 11.04.2014

Clang++ и g++ coliru говорят, что это неоднозначно: coliru.stacked-crooked.com/a/078c26aeb1abb226</ а>   —  person mockinterface    schedule 11.04.2014

Да, они неоднозначны. Я так и не удосужился изучить это подробнее,

Читать:
Использование атрибута авторизации с аутентификацией на основе настраиваемых утверждений

здесь   —  person mockinterface    schedule 11.04.2014

Другим вариантом был бы явный выбор шаблона…   —  person mockinterface    schedule 11.04.2014

Вы можете избежать двусмысленности, определив второй шаблон как template<typename T> void foo(T * const& x);. При выводе аргумента для T больше не будет распада массива.   —  person mockinterface    schedule 12.04.2014

@JohannesSchaub-litb В C++14 был введен окончательный стандартный способ: std::decay, см. мое последнее обновление   —  person mockinterface    schedule 20.05.2014

Связано: Какова цель унарного оператора плюс? и что такое затухание массива?.   —  person mockinterface    schedule 25.03.2015

Похожие записи

Джулия: Сделайте Dataframe из вывода итератора

admin

Массив не в массиве для запроса доктрины

admin

Использование атрибута авторизации с аутентификацией на основе настраиваемых утверждений

admin

Многокомпонентная загрузка Amazon S3 с использованием низкоуровневого API Java загружает только одну часть

admin

Скомпилированный проект с файлами .lib, но когда я запускаю, Windows жалуется, что dll не найдена

admin

Производительность драйвера golang mongo

admin