[00:33:37] <TRUE> [03:13:11] <vlad2> как в плюсах получить ошибку компиляции, если мембер определенного типа не является последним в очереди инициализации? :)
[00:34:19] <TRUE> вместо ошибки компиляции может лучше сортировать и компилировать правильно? Шаблоны такое могут?
[00:35:39] <TRUE> Собственный список, который сортирует элементы так, что в конце всегда тред.
[00:36:35] <TRUE> Или стек. Первым запихнуть тред, а потом уже как получится. Когда при инициализации будут доставаться элементы, последним будет извлечён тред.
[00:44:50] <vlad2> Да, можно придумать "список" мемберов, который будет сортироваться как надо.
[00:45:13] <vlad2> Но это будет реально злобно выглядеть.
[00:45:17] <vlad2> Типа того:
[00:46:05] <vlad2> class X : public threadAlwaysLast<int,boost:::thread,char>
[00:47:02] <vlad2> Ну и потом именованные мемберы надо проинить как-то и передать параметры в конструкторы. Не. Очень страшно будет.
[00:48:23] <vlad2> При том, что обратная задача (прионинть первым) решается очень просто - достаточно вынести boost::thread в базовый класс и наследоваться от него.
[00:49:04] <vlad2> В идеале я бы представил себе решение так:
[00:49:53] <vlad2> class X : private checkThreadIsLast<X> {... boost::thread t};
[00:50:48] <vlad2> checkThreadIsLast<T> - шаблон, который при инстанцировании итерируется по всем мемберам T и убеждается, чтопоследний мембер это boost::thread
[00:52:36] <valexey> vlad2: ты ведь под порядком подразумеваешь не размещение в памяти, а порядок вызова конструкторов?
[00:52:49] <vlad2> Т.е. пишется один раз и всегда на чеку если кто-то случайно дописал мембер после thread.
[00:53:11] <vlad2> Да. Только в плюсах это одно и то же.
[00:53:35] <valexey> нет, вроде бы не обязательно. ну, то есть физический порядок полей в структуре не определен вроде как.
[00:53:56] <vlad2> А. Ну может. Хотя было бы странным.
[00:54:21] <valexey> ну, например для минимизации padding'а и всякое такое для выравнивания.
[00:54:29] <valexey> в случае компиляции с оптимизацией
[00:55:16] <vlad2> Не уверен. По-моему не имеет права. Что-то типа указатель на очередной мембер больше предыдущего.
[00:55:50] <vlad2> Кстати, на D такое можно (проитерироваться по мемберам)?
[00:56:10] <vlad2> Или там в С++11 :)
[00:56:50] <valexey> про простой способ в D - не знаю. Но вообще, в D довольно дофига compile time type information, то есть разобрать тип на этапе компиляции думаю можно.
[00:57:00] <valexey> Равно как на этапе компиляции сгенерировать тип.
[00:57:08] <valexey> (например по текстовому описанию)
[00:59:12] <valexey> vlad2: гугл подсказывает вот такой ад: http://www.boost.org/doc/libs/1_52_0/libs/fusion/doc/html/fusion/adapted/adapt_struct.html
[01:03:34] <vlad2> Ну да. Такое будет работать. Но все равно тяжеловесно.
[01:04:02] <vlad2> И с остальными мемберами непонятно (функции).
[01:04:29] <vlad2> Хочется неинтрузивную нашлепку :)
[01:04:45] <valexey> "The D compiler is free to rearrange the order of fields in a class to optimally pack them in an implementation-defined manner."
[01:05:19] <vlad2> D - может быть :) А у плюсов тяжкое наследие :)
[01:05:49] <vlad2> Сам подумай, что стало бы с харкорным сишным кодом, если бы компилятор начал менять порядок полей :)
[01:08:16] <vlad2> А как бот твою капчу обошел?
[01:08:24] <valexey> скорее всего человек
[01:08:49] <vlad2> info21? :)
[01:10:45] <valexey> не. это довольно популярная профессия (даже у нас, а в китае и индии - тем более) - ты регистрируешься на сайтах, тебе за каждую регистрацию выдают денюжку (мелкую, скажем 1-5 центов). на какое мыло регаться - тебе говорят.
[01:10:56] <valexey> иногда ты же и рекламу там размещаешь.
[01:11:18] <valexey> кластер китайцев - это не фигуральное выражение :-)
[01:11:45] <valexey> даже амазон занимается этим, точнее является посредником (понятно что в случае амазона это не для спама делается) : http://en.wikipedia.org/wiki/Amazon_Mechanical_Turk
[01:22:32] <valexey> vlad2: во! http://stackoverflow.com/questions/281045/do-class-struct-members-always-get-created-in-memory-in-the-order-they-were-decl
[01:24:11] <valexey> В С11: Within a structure object, the non-bit-field members and the units in which bit-fields
reside have addresses that increase in the order in which they are declared. A pointer to a
structure object, suitably converted, points to its initial member (or if that member is a
bit-field, then to the unit in which it resides), and vice versa. There may be unnamed
padding within a structure object, but not at its beginning.
[01:25:09] <valexey> В С++11... The order of allocation of non-static data members with different access control is unspecified...
[01:25:39] <valexey> Ну и полностью: Nonstatic data members of a (non-union) class with the same access control (Clause 11) are allocated so
that later members have higher addresses within a class object. The order of allocation of non-static data
members with different access control is unspecified (11). Implementation alignment requirements might
cause two adjacent members not to be allocated immediately after each other; so might requirements for
space for managing virtual functions (10.3) and virtual base classes (10.1).
[01:28:19] <vlad2> Хм. Интересно, почему они ограничились same access control
[01:28:36] <vlad2> Уж если плюют на совместимость с Си, то пусть плюют.
[01:29:35] <valexey> дык, в случае same access control у нас полная совместимость с сями как раз
[01:29:50] <valexey> а вот в каком порядке пойдет приватные и паблик методы - мы не знаем.
[01:30:16] <valexey> ну, то есть struct S {int a; private: int b;}; // не известно что раньше a или b
[01:30:40] <valexey> а вот class C{int a; int b;} // известно что a раньше чем b
[01:32:09] <valexey> мне вот интересно другое - выходит порядок полей в обероновских структурах тоже нифига не определен
[01:32:24] <valexey> и по хорошему. интерфейситься со всеми остальными можно только через PUT/GET
[01:32:34] <valexey> SYSTEM.PUT/SYSTEM.GET
[01:32:50] <valexey> то есть ручной маршалинг с копированием.
[01:41:39] <vlad2> Гы. 16 страниц же ш.
[01:43:15] <valexey> useless!
[02:23:21] <vlad2> КлевЕта!
[02:28:07] <valexey> А то ж!
[02:53:19] <valexey> "Кремниевой долине работают 40 тысяч русских"
[02:58:21] <vlad2> А индусов сколько?
[02:59:13] <valexey> хез
[02:59:38] <valexey> но при общем IT'шной численности в россии порядка 150 тысяч человек - 40 тыс. в этой долине - это ж дофига
[03:00:00] <valexey> то есть каждый четвертый занятый в отрасли Россиянин валит в оную долину
[03:00:08] <valexey> (и это без учета деревень вроде вашей)
[03:00:25] <valexey> (и без учета других стран. при этом скажем в Германию тоже сбежало довольно дофига)
[18:00:10] <Kemet> !
[18:07:10] <valexey> !
[18:07:52] <valexey> сволочная тень на IR-изображении!
[18:08:01] <valexey> /me думает как её алгоритмически компенсировать
[19:16:30] <Kemet> valexey: тень отца гамлета?
[19:43:59] <TRUE> ну, не настолько сволочная...
[23:21:01] <valexey> Жгут! http://forum.oberoncore.ru/viewtopic.php?f=28&t=4379