Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | |
Посмотрю. Только добацаю этот проект ;) 23.08.06 03:57 Число просмотров: 2017
Автор: void <Grebnev Valery> Статус: Elderman
|
|
<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)
|
|
|