HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > нубовопросы по c++
Страницы (9): « 1 [2] 3 4 5 6 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



XaeroX
Т.е. функцию вроде-как определили в локальном неймспэйсе класса, а она вылезла в глобальный? Вот этот момент какой-то странный, хоть и компилируется. Это точно не UB?

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 170163

Старое сообщение 23-12-2017 00:58
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


thambs
Функция определена в глобальном неймспейсе.
Кажется, ты путаешь объявление и определение.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 170171

Старое сообщение 23-12-2017 05:57
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4133

Рейтинг



XaeroX
Такой вызов — единственная осмысленная вещь, которую можно сделать с этой объявленной функцией?

Кстати, в гецеце же вроде можно включить расширение, которое даёт вложенные функции.

Сообщить модератору | | IP: Записан
Сообщение: 170173

Старое сообщение 23-12-2017 08:15
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
nemyax писал:
Такой вызов — единственная осмысленная вещь, которую можно сделать с этой объявленной функцией?

А что ещё можно сделать с функцией, кроме как вызвать?
Ну можешь адрес взять.

Цитата:
nemyax писал:
Кстати, в гецеце же вроде можно включить расширение, которое даёт вложенные функции.

Кошмар какой.
Это не нужно, т.к. есть лямбды.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 170175

Старое сообщение 23-12-2017 09:46
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



XaeroX
Так объявление в неймспэйсе класса, а определение в глобальном, вот это мне странно. Так ведь можно и в другом классе такую же функцию объявить и будет путанница или нет?

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 170180

Старое сообщение 23-12-2017 11:48
- За что?
a1batross
Житель форума

Дата регистрации: May 2016
Проживает: Москва
Сообщений: 516
Возраст: 26

Рейтинг



XaeroX даже если лябмд нет, можно объявлять, например, структуру со статическими методами прямо в теле. Но из двух кошмаров и лямбд, всё же лучше выбирать лямбды.

Сообщить модератору | | IP: Записан
Сообщение: 170181

Старое сообщение 23-12-2017 12:12
- За что?
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


Цитата:
thambs писал:
Так ведь можно и в другом классе такую же функцию объявить и будет путанница или нет?


Если ты будешь вызывать ее из этого же класса, то будет вызываться функция из класса.

Сообщить модератору | | IP: Записан
Сообщение: 170182

Старое сообщение 23-12-2017 12:26
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
a1batross писал:
даже если лябмд нет, можно объявлять, например, структуру со статическими методами прямо в теле.

Ну можно, конечно, мы в детстве так развлекались.
Но это формально не вложенная функция.
Цитата:
thambs писал:
Так ведь можно и в другом классе такую же функцию объявить и будет путанница или нет?

А ты поэкспериментируй с typeid и увидишь, что у них разные сигнатуры будут.
Путаница может быть только с namespace. И здесь у плюсов весьма и весьма запутанные правила. Но они существуют.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 170183

Старое сообщение 23-12-2017 12:30
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
Но это формально не вложенная функция.

Эй, чувак мы добавили возможность объявить функцию внутри функции, чтобы ты мог вызывать функцию прямо из функции!

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 170189

Старое сообщение 23-12-2017 13:45
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



А вот ещё вопрос про наследование возник внезапно.
Например, у меня есть базовый шаблонный класс

C++ Source Code:
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
};
внутри которого определены всякие полезные методы.
Я хочу отнаследоваться от него, прилинковав указатель shape к массиву:
C++ Source Code:
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
};
, однако, хотелось бы избавиться от лишнего присваивания и в явном виде "подменить" указатель на массив. Если я просто объявлю size_t shape[n], то в результате получу ещё одно поле с тем же именем, чего мне не нужно. Как сделать правильно?

__________________
http://www.moddb.com/mods/monorail-quest

Отредактировано thambs 10-05-2018 в 16:36

Сообщить модератору | | IP: Записан
Сообщение: 172569

Старое сообщение 10-05-2018 16:19
- За что?
ComradeAndrew
Житель форума

Дата регистрации: Aug 2014
Проживает: Дубай
Сообщений: 510
Возраст: 27

Рейтинг



Цитата:
thambs писал:
хотелось бы избавиться от лишнего присваивания и в явном виде "подменить" указатель на массив

Прямо переопределить не получится
https://stackoverflow.com/a/19290950/4109062

Сообщить модератору | | IP: Записан
Сообщение: 172570

Старое сообщение 10-05-2018 16:38
- За что?
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



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]; } };

Предполагается, что место под данные заранее аллокировано (где угодно, хоть на стеке, хоть в куче, хоть на gpu). Что бы это можно было удобно использовать и копировать, хочется сделать производный класс, который и сам обращается с внешним аллокатором, но вот аллокатить ещё и место под служебные данные совсем не хочется, логично было бы хранить offset и shape прямо в классе. Вот и думаю как лучше сделать.

ps: тег [/сср] корябает отступы

__________________
http://www.moddb.com/mods/monorail-quest

Отредактировано thambs 10-05-2018 в 16:57

Сообщить модератору | | IP: Записан
Сообщение: 172572

Старое сообщение 10-05-2018 16:54
- За что?
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



Ага, разобрался. Сделал так:

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

Отредактировано thambs 11-05-2018 в 17:32

Сообщить модератору | | IP: Записан
Сообщение: 172582

Старое сообщение 11-05-2018 17:21
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Как вы эти шаблоны делаете, я их боюсь до ужаса.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 172583

Старое сообщение 11-05-2018 21:35
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Дядя Миша
Ну шаблоны - скорее исключение, чем правило. Их обычно не рекомендуют использовать там, где можно без них обойтись (то есть в 99% случаев). Для меня на работе протащить шаблон в master - это всегда праздник.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 172584

Старое сообщение 12-05-2018 08:04
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 14:44. Новая тема    Ответить
Страницы (9): « 1 [2] 3 4 5 6 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > нубовопросы по c++
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024