[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: boost bind/lambda
- From: beo wulf <beowulf@...>
- Date: Tue, 4 Jan 2011 21:35:33 -0800
Goal: I want to luabind all of OpenGL.
Problem: glLightfv( int, int, GLfloat*)
Almost solution: boost::bind
The following code almost works -- it can use boost::bind to convert
functions that take arg GLfloat* to take an arg of
boost::shared_ptr<std::vector<GLfloat>> instead. However, boost::bind
and luabind seem to not work with each other (in particular, the line
, def("glLightfv2", bind(glLightfv, _1, _2, _3)) // ths line does not compile
Why?
Full code below:
#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>
#include <vector>
#include <iostream>
#include <luabind/luabind.hpp>
#include <luabind/operator.hpp>
#include <luabind/adopt_policy.hpp>
#include <luabind/copy_policy.hpp>
#include <luabind/class_info.hpp>
#include <GL/gl.h>
#define P boost::shared_ptr
#define V std::vector
float foo(int x, int y, float* f) {
float ans = 0;
ans = x + y + f[0] + f[1] + f[2];
return ans;
}
float* get_raw(P<V<float> > p) {
return &((*p)[0]);
}
void test() { // works fine
P<V<float> > p(new V<float>());
p->push_back(1);
p->push_back(2);
p->push_back(3);
// I want this to output 9
std::cout << bind(foo, _1, _2, bind(get_raw, _3))(1, 2, p) << std::endl;
}
int main() {
using namespace luabind;
lua_State *L;
module( L )
[
namespace_("gl") [
def( "glLightfv", glLightfv)
// Why do these two lines not compile?
// , def( "glLightfv2", bind(glLightfv, _1, _2, _3))
// , def( "glLightfv3", bind(glLightfv, _1, _2, bind(get_raw, _3)))
]
]
;
}