Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сигнатура функции возвращающей ссылку на, массив константного размера. 
V
    Опции темы
boostcoder
Дата 15.1.2012, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(rumit7 @  15.1.2012,  14:58 Найти цитируемый пост)
А что если так?

я тоже начал над constexpr классом думать. пока еще недодумал. отпишусь.
PM WWW   Вверх
boostcoder
Дата 15.1.2012, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



вот что получилось.
весьма не плохо!
Код

template<int N>
struct array {
   template<typename... T>
   constexpr array(T... v)
      :size_{N}
      ,data_{v...}
   {}
   constexpr array(const array<N>& v)
      :size_{v.size_}
      ,data_{v.data_}
   {}
   
   constexpr int size() const { return size_; }
   constexpr int operator[](int i) const { return data_[i]; }
   constexpr const int* begin() const { return &data_[0]; }
   constexpr const int* end() const { return &data_[size_]; }

private:
   int size_;
   const int data_[N];
};

int main() {
   constexpr int src[] = {1,2,4,5,6,54,43,3,4,5,6,7,8,8,7,8,9,7,65,4,4,3,3,4,5,6,7,7,65,54};
   constexpr array<30> res(1,2,4,5,6,54,43,3,4,5,6,7,8,8,7,8,9,7,65,4,4,3,3,4,5,6,7,7,65,54);
   
   char cs[res.size()]; /* array<>::size() - constant expression */
   static_assert(sizeof(cs) == sizeof(src)/sizeof(src[0]), "error 1!");
   
   char ci[res[2]]; /* array<>::operator[] - constant expression */
   static_assert(sizeof(ci) == src[2], "error 2!");
   
   char cb[*res.begin()]; /* array<>::begin() - constant expression */
   static_assert(sizeof(cb) == res[0], "error 3!");
   char ce[*res.end()]; /* array<>::size() - constant expression (вроде как...) */
//   static_assert(sizeof(ce) == res[0], "error 4!"); /* а тут какая-то странная ошибка %) */
}


http://liveworkspace.org/?id=08a1ff5b9a27d...17fa3293a695db4

нужно создать функцию-адаптер, чтоб конструктор array<> можно было инициализировать с помощью src.
PM WWW   Вверх
mes
Дата 16.1.2012, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



а чем все ж 
Цитата(mes @  15.1.2012,  13:25 Найти цитируемый пост)
std::array

не устроил ?




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 16.1.2012, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  16.1.2012,  01:32 Найти цитируемый пост)
а чем все ж std::array не устроил ?

у него constexpr методами являются только: size(), max_size(), empty(), operator[].
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0842 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.