информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяSpanning Tree Protocol: недокументированное применениеВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Блокировка российских аккаунтов... 
 Отзыв сертификатов ЦБ РФ, ПСБ,... 
 Памятка мирным людям во время информационной... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
VC6 - 98-й год выпуска. Вряд ли он сильно совместим со стандартом 98-го года :-) 23.08.06 14:19  Число просмотров: 1909
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> >#include <iostream>
> >
> > template <typename T, size_t N>
> > inline size_t array_size(T (&)[N]) {return N;}
>
> Кстати, почему-то не хочет компилироваться в VC 6 :
> error C2265: '<Unknown>' : reference to a zero-sized
> array is illegal

Я слышал, что в VC6 и помимо несовместимости со стандартом куча проблем. Нормальный компилятор появился только начиная с VS.Net (7.0)
<programming>
[C++] колво символов в строке 21.08.06 04:34  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Что бы грамотнее было ...?

_tcscpy_s( dest, sizeof(dest)/sizeof(dest[0]), src);

или

_tcscpy_s( dest, sizeof(dest)/sizeof(TCHAR), src);

Кажется первый вариант чуть лучше. Спасибо.
[C++] Дык эти макросы это все таки C 21.08.06 15:05  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Но раз уже ты записал профиль C++, то лови стандартный плюсовый сниппет для получения количества элементов в массиве

template <typename T, size_t N>
inline size_t array_size(T (&)[N]) {return N;}

---

Пользоваться соответственно так:

#include <iostream>

template <typename T, size_t N>
inline size_t array_size(T (&)[N]) {return N;}

int a[10];
struct mystruct {int a, b, c;} b[12];
char c[] = "adfgsdfhsfjshj";

int
main() {
	std::cout << array_size(a) << std::endl << array_size(b) << std::endl << array_size(c) << std::endl;
}

---

Самое забавное, что темплейтный вариант позволяет частичным инстанцированием изменить поведение для некоторых типов/размеров массивов.

> Что бы грамотнее было ...?
>
> _tcscpy_s( dest, sizeof(dest)/sizeof(dest[0]), src);
>
> или
>
> _tcscpy_s( dest, sizeof(dest)/sizeof(TCHAR), src);
>
> Кажется первый вариант чуть лучше. Спасибо.

Что же касается чистого C, то да, лучше привязываться к переменной, а не к ее предполагаемому типу (который запросто может поменяться).
Кстати, почему-то не хочет компилироваться в VC 6 : 23.08.06 05:19  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
>#include <iostream>
>
> template <typename T, size_t N>
> inline size_t array_size(T (&)[N]) {return N;}

Кстати, почему-то не хочет компилироваться в VC 6 :
error C2265: '<Unknown>' : reference to a zero-sized array is illegal

В VC 8.0 - проеблем нет

VC6 - 98-й год выпуска. Вряд ли он сильно совместим со стандартом 98-го года :-) 23.08.06 14:19  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> >#include <iostream>
> >
> > template <typename T, size_t N>
> > inline size_t array_size(T (&)[N]) {return N;}
>
> Кстати, почему-то не хочет компилироваться в VC 6 :
> error C2265: '<Unknown>' : reference to a zero-sized
> array is illegal

Я слышал, что в VC6 и помимо несовместимости со стандартом куча проблем. Нормальный компилятор появился только начиная с VS.Net (7.0)
Спасибо. Кул ;) 22.08.06 02:49  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Ой, я как прочитал Александреску - понял, что *вообще ничего* не знаю о темплейтах 22.08.06 04:08  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Вон у него в книге по ходу дела пишется библиотека для метапрограммирования (loki)

Ну и для общего развития стоит посмотреть на различные реализации STL, boost тоже весьма интересен (хотя с наскоку многие вещи - хрен поймешь).
Посмотрю. Только добацаю этот проект ;) 23.08.06 03:57  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Предпочитаю первый вариант, а именно размер элемента, а не... 21.08.06 11:49  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
<"чистая" ссылка>
> Что бы грамотнее было ...?
>
> _tcscpy_s( dest, sizeof(dest)/sizeof(dest[0]), src);
>
> или
>
> _tcscpy_s( dest, sizeof(dest)/sizeof(TCHAR), src);
>
> Кажется первый вариант чуть лучше. Спасибо.

Предпочитаю первый вариант, а именно размер элемента, а не размер типа.
Какие баги это позволяет избежать - вдруг, через какое-то время стало нехватать размерности элемента; нужно незабыть поменять везде типы; а если где-то забыл... Суть-то все-равно малоразличима. Было б наверное неплохо на уровне с sizeof иметь typeof, которая вернет размерность типа массива или numof, которая вернет количество элементов.
typeof есть :-) 21.08.06 15:13  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> все-равно малоразличима. Было б наверное неплохо на уровне
> с sizeof иметь typeof, которая вернет размерность типа
> массива или numof, которая вернет количество элементов.

typeof есть :-)
Правда называется typeid и предназначен для получения динамической информации ТОЛЬКО абстрактных типов.
Всю статическую информацию о типе можно вытащить при помощи шаблонов (посмотри например на stlport-овский stl/type_traits.h)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2022 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach