Наше комьюнити:   OpenGL Shader Lab  •  Half-Life FX  •  Форум  
HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > нубовопросы по c++
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
thambs
GNU/Hurt

Группа: Опытный
Дата регистрации: Mar 2006
Проживает: (void)
Сообщений: 4650

Рейтинг



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

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

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

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

Дата регистрации: Oct 2005
Проживает: Новосибирск
Сообщений: 28024
Нанёс повреждений: 466 ед.
Возраст: 32

Рейтинг



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


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

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'

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

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

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

Рейтинг



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

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

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

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

Дата регистрации: Oct 2005
Проживает: Новосибирск
Сообщений: 28024
Нанёс повреждений: 466 ед.
Возраст: 32

Рейтинг



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


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

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

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

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

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'

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

Старое сообщение 23-12-2017 08:46
-
thambs
GNU/Hurt

Группа: Опытный
Дата регистрации: Mar 2006
Проживает: (void)
Сообщений: 4650

Рейтинг



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

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

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

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

Группа: Неопытный
Дата регистрации: May 2016
Проживает: Москва
Сообщений: 179
Возраст: 20

Рейтинг



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

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

Старое сообщение 23-12-2017 11:12
- За что?
Government-Man
Х. П. Джигурда

Группа: Опытный
Дата регистрации: Apr 2006
Проживает: джунгли
Сообщений: 3184
Возраст: 27

Рейтинг



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


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


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

__________________
Vladimir Putin's paternal grandfather, Spiridon Ivanovich Putin (1879–1965), was employed at Vladimir Lenin's dacha at Gorki as a cook, and after Lenin's death in 1924, he continued to work for Lenin's wife, Nadezhda Krupskaya. He would later cook for Joseph Stalin when the Soviet leader visited one of his dachas in the Moscow region. Spiridon later was employed at a dacha belonging to the Moscow City Committee of the Communist Party of the Soviet Union, at which the young Putin would visit him.

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

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

Дата регистрации: Oct 2005
Проживает: Новосибирск
Сообщений: 28024
Нанёс повреждений: 466 ед.
Возраст: 32

Рейтинг



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


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

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

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

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'

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

Старое сообщение 23-12-2017 11:30
-
 Дядя Миша
who said meow?

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

Рейтинг



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

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

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

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

Старое сообщение 23-12-2017 12:45
-
thambs
GNU/Hurt

Группа: Опытный
Дата регистрации: Mar 2006
Проживает: (void)
Сообщений: 4650

Рейтинг



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

C++ Source Code:
template <typename t, size_t n>
struct base{
    t*         data;
    size_t* shape;
    base<t, dim>(t* data, size_t* shape):
data(data), shape(shape){}
...
};
внутри которого определены всякие полезные методы.
Я хочу отнаследоваться от него, прилинковав указатель shape к массиву:
C++ Source Code:
template <typename t, size_t n>
struct derived: base<t, n>{
    size_t _shape[n];
    derived<t, dim>(){
        this->data   = nullptr; //кстати, почему здесь нужно обращаться к this?
        this->shape  = _shape;
    };
    ...
};
, однако, хотелось бы избавиться от лишнего присваивания и в явном виде "подменить" указатель на массив. Если я просто объявлю 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
C++

Дата регистрации: Aug 2014
Проживает: (void)
Сообщений: 493
Возраст: 21

Рейтинг



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

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

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

Старое сообщение 10-05-2018 16:38
- За что?
thambs
GNU/Hurt

Группа: Опытный
Дата регистрации: Mar 2006
Проживает: (void)
Сообщений: 4650

Рейтинг



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
GNU/Hurt

Группа: Опытный
Дата регистрации: Mar 2006
Проживает: (void)
Сообщений: 4650

Рейтинг



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

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
- За что?
 Дядя Миша
who said meow?

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

Рейтинг



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

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

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

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

Дата регистрации: Oct 2005
Проживает: Новосибирск
Сообщений: 28024
Нанёс повреждений: 466 ед.
Возраст: 32

Рейтинг



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


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

__________________
So she began again: 'Où est ma chatte?' which was the first sentence in her French lesson-book. The Mouse gave a sudden leap out of the water, and seemed to quiver all over with fright. 'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt the poor animal's feelings. 'I quite forgot you didn't like cats.'

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

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



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


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

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

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

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

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

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

Рейтинг@Mail.ru