Страницы (9): « 1 [2] 3 4 5 6 » ... Последняя » Показать все 123 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- нубовопросы по c++ (https://hlfx.ru/forum/showthread.php?threadid=5083)
XaeroX
Т.е. функцию вроде-как определили в локальном неймспэйсе класса, а она вылезла в глобальный? Вот этот момент какой-то странный, хоть и компилируется. Это точно не UB?
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Функция определена в глобальном неймспейсе.
Кажется, ты путаешь объявление и определение.
__________________
XaeroX
Такой вызов — единственная осмысленная вещь, которую можно сделать с этой объявленной функцией?
Кстати, в гецеце же вроде можно включить расширение, которое даёт вложенные функции.
__________________
XaeroX
Так объявление в неймспэйсе класса, а определение в глобальном, вот это мне странно. Так ведь можно и в другом классе такую же функцию объявить и будет путанница или нет?
__________________
http://www.moddb.com/mods/monorail-quest
XaeroX даже если лябмд нет, можно объявлять, например, структуру со статическими методами прямо в теле. Но из двух кошмаров и лямбд, всё же лучше выбирать лямбды.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вот ещё вопрос про наследование возник внезапно.
Например, у меня есть базовый шаблонный класс
1 | template <typename t, size_t n> |
2 | struct base{ |
3 | t* data; |
4 | size_t* shape; |
5 | base<t, dim>(t* data, size_t* shape): |
6 | data(data), shape(shape){} |
7 | ... |
8 | }; |
1 | template <typename t, size_t n> |
2 | struct derived: base<t, n>{ |
3 | size_t _shape[n]; |
4 | derived<t, dim>(){ |
5 | this->data = nullptr; //кстати, почему здесь нужно обращаться к this? |
6 | this->shape = _shape; |
7 | }; |
8 | ... |
9 | }; |
__________________
http://www.moddb.com/mods/monorail-quest
ComradeAndrew
Хмм, а как тогда лучше перестроить иерархию классов?
Конкретно, у меня такой вариант морды, для доступа к многомерному массиву:
code:
template <typename t, size_t dim> struct carray_base{ t* data; size_t* offset; size_t* shape; carray_base<t, dim>(t* data, size_t* shape, size_t* offset): data(data), shape(shape), offset(offset) {} inline size_t size(void)const{ return shape[0]*offset[0]; } template <typename num, size_t d = dim, typename enable_if<(d > 1), size_t>::type = 0> inline carray_base<t, dim-1> operator [] (num i){ return carray_base<t, dim-1>(data + (size_t)i*offset[0], shape+1, offset+1); } template <typename num, size_t d = dim, typename enable_if<(d == 1), size_t>::type = 0> inline t& operator [] (num i) { return data[(size_t)i]; } };
__________________
http://www.moddb.com/mods/monorail-quest
Ага, разобрался. Сделал так:
code:
template <typename t, size_t dim, bool proxy> struct carray_base{ static_assert(dim>0, ""); typedef typename conditional<proxy, size_t*, size_t[dim]>::type id; t* data; id offset; id shape; ... }; template <typename t, size_t dim> struct carray: carray_base<t, dim, false>{ ... };
__________________
http://www.moddb.com/mods/monorail-quest
Как вы эти шаблоны делаете, я их боюсь до ужаса.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну шаблоны - скорее исключение, чем правило. Их обычно не рекомендуют использовать там, где можно без них обойтись (то есть в 99% случаев). Для меня на работе протащить шаблон в master - это всегда праздник.
__________________
Временная зона GMT. Текущее время 02:40. | Страницы (9): « 1 [2] 3 4 5 6 » ... Последняя » Показать все 123 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024