Требуется литературка по OpenGL и ООП
но лучше сразу читай исходники.
По OpenGL:
У кого нить курсы ВУЗ-е есть или хотя бы задания в электронном виде?
Задания:
http://graphics.cs.msu.ru/courses/cg/assigns/2005/hw4/index....
http://graphics.cs.msu.ru/courses/cg/assigns/2005/hw5/index....
http://graphics.cs.msu.ru/courses/cg03b/assigns/hw4/index.ht...
http://graphics.cs.msu.ru/courses/cg03b/assigns/hw5/index.ht...
Спасибо
Надеюсь одолею Александреску.
Посмотрел задачки по OpenGL - уровень начинающий.
Надеюсь одолею Александреску.Это будет непросто. Ты уже заботал разложившегося страуса?
#if !BOOST_PP_IS_ITERATING
#ifndef CPP_CONSTRUCTOR_H
#define CPP_CONSTRUCTOR_H
#include <boost/preprocessor/punctuation/paren_if.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat.hpp>
#include <boost/preprocessor/iteration/iterate.hpp>
#include "cpp_reg_base.h"
#include "convert_l2cpp.h"
#include "arity.h"
#include "replicator.h"
namespace lua_faber
{
#define LF_ARITY_VAL(z, n, text) n_ar<a ## n>::_v +
struct null_arg { };
// define constructor invoker type
typedef ptr_replicator*(*invoke_cons_tlua_ctx&);
// declare a constructor closure
class lua_cons_closure
{
public:
lua_cons_closure(invoke_cons_t invoke_cons, int arity) :
m_invoke_cons(invoke_cons
m_arity(arity
m_chained(false)
{
}
void register_self(const lua_ctx& ctx, const reg_scope& scope);
private:
invoke_cons_t m_invoke_cons;
std::vector<lua_cons_closure> m_chain;
int m_arity;
bool m_chained;
static int new_handler(lua_State* state);
};
// declare a constructor registry component
template<class c, BOOST_PP_ENUM_PARAMS(LF_MAX_ARITY, class a)>
class cons_comp : public reg_comp
{
public:
cons_comp : m_closure(invoke_cons, BOOST_PP_REPEAT(LF_MAX_ARITY, LF_ARITY_VAL, _) 0)
{
}
void register_self(const lua_ctx& ctx, const reg_scope& scope)
{
m_closure.register_self(ctx, scope);
}
const std::type_info& type
{
return typeid(void);
}
const char* name const
{
return "constructor";
}
template<class c> struct n_ar { enum { _v = 1 }; };
template<> struct n_ar<null_arg> { enum { _v = 0 }; };
static ptr_replicator* invoke_cons(lua_ctx& ctx)
{
c* pc = sel_invoke<c, BOOST_PP_REPEAT(LF_MAX_ARITY, LF_ARITY_VAL, _) 0>::invoke(ctx);
if (pc == NULL)
throw lua_runtime_exception("out of memory");
return ptr_replicator::create(ctx, pc);
}
// generate invoke classes
template<class c, int arity> class sel_invoke;
#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, LF_MAX_ARITY, "cpp_constructor.h"
#define LF_CONS_PARAMS(z, n, N) convert::convert<a##n,boost::is_reference<a##n>::value,boost::is_pointer<a##n>::value>::apply(ctx, -N+n)
#include BOOST_PP_ITERATE
private:
lua_cons_closure m_closure;
};
// helper, which creates a constructor component
template<class c, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(LF_MAX_ARITY, class a, null_arg)>
class constructor : public list_comp<c>
{
public:
constructor : m_comp(new cons_comp<c, BOOST_PP_ENUM_PARAMS(LF_MAX_ARITY, a)>)
{
}
operator reg_comp_ptr const
{
return m_comp;
}
private:
reg_comp_ptr m_comp;
};
}
#endif // CPP_CONSTRUCTOR_H
#else // !BOOST_PP_IS_ITERATING
// generate constructor invocation
template<class c>
class sel_invoke<c, BOOST_PP_ITERATION>
{
public:
static c* invoke(const lua_ctx& ctx)
{
return new c BOOST_PP_LPAREN_IF(BOOST_PP_ITERATION
BOOST_PP_ENUM(BOOST_PP_ITERATION LF_CONS_PARAMS, BOOST_PP_ITERATION
BOOST_PP_RPAREN_IF(BOOST_PP_ITERATION;
}
};
#endif
Не, Страуструпа и Аммерааля еще не ботал сильно. Просто они по языку, а хоцца по концепции.
Не, Страуструпа и Аммерааля еще не ботал сильно. Просто они по языку, а хоцца по концепции.Трупег волне себе по концепции. А то потом ты будешь использовать printf в логировании.
Мне правда как Аммерааль пишет понравилось. Только вот лениво читать было.
я вот его в виде духовной практики читал. точку сборки двигал.
да просто спокойней надо ко всему относитьсяМожет быть. Я привык читать книги до конца. Зачастую мнение меняется только в середине - в конце. Потом пробуешь это на практике, и ещё раз понимаешь те вещи, в которых ты сам был неправ.
Потом пробуешь это на практике, и ещё раз понимаешь те вещи, в которых ты сам был неправ.мм? не совсем, кажется, понял, что ты хотел сказать.
поясни (на примере того же александреску) эту фразу, пожалуйста.
мм? не совсем, кажется, понял, что ты хотел сказать.На примере Александреску это пояснить непросто. Только от противного. Как бы ты сделал прозрачный биндинг между питоном и Си++, таким образом, чтобы объекты Си++ можно было бы создавать в питоне, чтобы можно было вызывать функции этих объектов и чтобы они удалялись и вызывался Си++ деструктор в момент, когда GC собирает эти объекты? До прочтения нескольких книг практически любой программист видит в этой задаче необходимость использовать парсер, после прочтения - не видит.
поясни (на примере того же александреску) эту фразу, пожалуйста.
Мне правда как Аммерааль пишет понравилось. Только вот лениво читать было.Хорошо и концептуально пишет Брюс Эккель.
Оставить комментарий
0000
По OpenGL:У кого нить курсы ВУЗ-е есть или хотя бы задания в электронном виде?
Интересует уровень.
Книги особо не нужны. Собрал и так почти все что можно (на торренте есть моя раздача, если кому надо).
По ООП и архитектуре:
Название книги, чтобы прогить концептуально. Что там классикой считается?
Язык программирования С++.