Вопросы

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

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


Например, рассмотрим случай, когда вам нужно иметь возможность направлять 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

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

Переводчик когнитивных служб Azure обнаруживает, что язык не работает

admin

Как лучше всего защитить исходный код Python приложения Flask от копирования?

admin

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

admin

Есть ли способ преобразовать формат данных файла .pb из NCHW в NHWC?

admin

Как преобразовать миллисекунды в минуты: секунды на выходе?

admin

Почему мой контроллер MVC возвращает неформатированный и заключенный в кавычки JSON?

admin