:-D
Я — С++ программист и очень хорошо знаком со всеми плюсами плюсов.
Но я уверен, что с C#, Python, Haskell, Java, etc. не приходится иметь дело с тем огромным количеством low level проблем, которые возникают на С++.
Я конечно фанат, Haskell, но вы как-то плохо его популяризируете =)
Уберите пожалуйста эти пугающие типы у read, они легко выводятся из использования (solve и printNSolutions принимают Int).
Там где вы считываете два числа можно сразу их распаковать:
Пару советов:
1. Убрать бы макросы;
2. использовать не один указатель void* data_, а массив статичной длины на стеке, тогда можно делать как boost::bind, и распаковывать его (на этапе компиляции) в месте вызова. Например так
f(*static_cast<BINDED_ARGS*>(data_[INDEXES])...)
INDEXES — это pack длины BINDED_ARGS, вида <0, 1, ...>
Унифицировать — это само по себе правильно, и если есть выбор унифицировать или нет, конечно же лучше унифицировать.
А в данном случае — это еще и экономие кода и оперативки.
Ну это сильно сложное, и наверное неправильное использование декоратора в РНР. Як конечно (слава Богу) не РНР-шник, и как там с интроспекцией не знаю, но РНР ведь динамически типизованный, и там все вообще просто должно быть — как в Питоне. А в Питоне декорация — проще некуда.
Я — С++ программист и очень хорошо знаком со всеми плюсами плюсов.
Но я уверен, что с C#, Python, Haskell, Java, etc. не приходится иметь дело с тем огромным количеством low level проблем, которые возникают на С++.
Но откуда же вам знать? Вы же как и все нормальные люди уже лет 15 не используете С++.
Пишут, что догоняет Хаксел и Окамл :-D
*на самом деле я тоже в Хаскеле новичок=)
И если есть возможность, то лучше без них обойтись.
Уберите пожалуйста эти пугающие типы у read, они легко выводятся из использования (solve и printNSolutions принимают Int).
Там где вы считываете два числа можно сразу их распаковать: А конец итерации лучше заменить на:
1. Убрать бы макросы;
2. использовать не один указатель void* data_, а массив статичной длины на стеке, тогда можно делать как boost::bind, и распаковывать его (на этапе компиляции) в месте вызова. Например так
INDEXES — это pack длины BINDED_ARGS, вида <0, 1, ...>
А в данном случае — это еще и экономие кода и оперативки.
Действительно очень красиво — просто и гениально!
Люблю такие решения.
Все еще под впечатлениями Алтая :-D
А еще Unicode можно:
Я конечно не совсем нуб, но все же можно поподробней?