San4es
Это контракт "наоборот". Правильные контракты и статический полиморфизм должны выглядеть следующим образом:
struct Data { int field0; int field1; }; template <typename T> void EditData(T* data, str_const member) { static_assert( std::contract::require_member<T, member>::type, "Given type has no member " + member); static_if( std::contract::require_member<T, member>::type) { T::*member = 255; } }
Вместо этого мы имеем обьявления указателей на члены класса, на методы, на функции и кучу бесполезного говна.
Полностью обобщённый require_member реализовать невозможно, приходится городить что-то типа такого:
template <typename T> class HasMetaClass { private: template <typename U, U> class Check { }; template <typename C> static char F(Check<DK::Class<T>*, &C::metaClass>*); template <typename C> static long F( ...); public: enum { Result = ( sizeof( F<T>( 0)) == sizeof( char)) }; };
static_if тоже нельзя сделать, вместо него:
template <typename T, bool> struct Retainer; template <typename T> struct Retainer<T, true> { static inline void Retain(T* ptr, bool) { /*ptr->Retain();*/ } static inline void Release( T* ptr, bool) { /*ptr->Release();*/ } }; template <typename T> struct Retainer<T, false> { static inline void Retain( T* ptr, bool) { ( void)ptr; } static inline void Release( T* ptr, bool) { delete ptr; } };
Использование которого ещё более жуткое:
Retainer<T, HasMetaClass<T>::Result>::Retain(objPtr, std::is_base_of<DK::ReferenceCountedObject, T>::value); Retainer<T, HasMetaClass<T>::Result>::Release( objPtr, std::is_base_of<DK::ReferenceCountedObject, T>::value);
У тебя получилось сходу понять код, написанный выше? Большинство сдаётся, когда видит SFINAE в HasMetaClass :)
Мало кто доходит до использования Retainer в качестве static_if.
А задача на самом деле очень простая - нужно было сделать обобщённый код, который бы управлял временем жизни объектов внутри биндинга к скриптам.
Если надо сделать что-то более сложное во время компиляции - код превращается в полный адЪ.
Поэтому int S::*member, при полном отсутствии в языке вменяемых средств для метапрограммирования, абсолютно никакой ценности не представляет.
bazhenovc
Честно - не получилось.
Я разве похож на человека у которого фамилия Александреску?
Чудо обобщенного программирования))
Закроем тему про плюсы, а то ругаются люди?
тема превратилась в тему про плюсы xD
надо сказать что читать стало сложнее(для меня), но интереснее и познавательнее...
> А сколько, если не секрет?
Bishop, не секрет. Он реально очень (я бы даже сказал, что излишне) короткий, порядка 20-25 мсек, но мы ещё пока тюним, так что всё может измениться.
Сегодня выкатили патч с новым революционным режимом улучшенной графики "Improved Graphics Mode" (c):
Крутой проект!
Достали протухший проект из гробика? :)
Почему протухший?
На Стиме мне он все время выпадает.
Цену только задрали до небес: была тысяча, сделали полторы.
Бобик, если бы вы ее по 400-500 руб. продавали, я бы купил. А так слишком дорого.
Я за это время купил Grav, Savage Lands и Reign of Kings. И все это в совокупности дешевле LiF.
Savage Lands многообещающая.
Ciaphas
> Почему протухший?
Все по той же причине :)
> На Стиме мне он все время выпадает.
> Цену только задрали до небес: была тысяча, сделали полторы.
> Бобик, если бы вы ее по 400-500 руб. продавали, я бы купил. А так слишком
> дорого.
> Я за это время купил Grav, Savage Lands и Reign of Kings. И все это в
> совокупности дешевле LiF.
> Savage Lands многообещающая.
А если бы мы ее бесплатно раздавали, вот бы народу то было :)
Ради интереса, и сколько времени вы наиграли в сумме в эти три игры? По опыту общения с игроками на выставках и по девелоперской статистике на стиме в нашу игру играют сотнями часов. Люди реально живут у нас, потому и Life is Feudal.
Пока этот чел из штатов держит рекорд (2000 часов на момент написания этого поста): http://steamcommunity.com/profiles/76561198052492832
Моя мысль о том, что можно накупить кучу игр, которые надоедят через пару часов, а можно купить одну и надолго и она того стоит ;)
Анекдот немного в тему:
Нашел лев на улице 50 руб. и решил исполнить мечту своей жизни - посетить
бордель. Приходит он туда и спрашивает сутенершу:
- А можно у вас заказать тигрицу?
- Да, конечно. 200 руб час
- А сколько будет стоить пантера? - спрашивает лев
- 150 руб. час.
Лев в раздумьях: денег то не хватает.
- Хорошо, а если леопардиху заказать?
- 100 руб час!- отвечает сутенерша.
- А у вас есть кто-нибудь на 50 руб.? -задает вопрос лев
- Конечно есть! Мышки-девственницы- 5 руб. пучок!!
Bobik
2000 часов за какое время? Год, два? Графон слабый.
:)))
Игра на Стиме появилась 19 Сентября 2014 года, так что грубо за пол года.
abrasive
> Графон слабый.
Don't you worry, графон к релизу подтянется.
Внезапно освободилась одна вакансия в отделе тестирования (QA)
Просьба отписываться по координатам в этой теме:
http://www.gamedev.ru/job/forum/?id=200300
Привет Bobik. а вы в Англии работаете? игра. то вроде как Английсской фирмы bitbox.ltd
Orcan
игра. то вроде как Английсской фирмы bitbox.ltd
По-моему он где-то говорил, что для ведения дела пришлось зарегистрировать фирму за рубежом. Это английский аналог наших ООО.
Тема в архиве.