lua-users home
lua-l archive

boost bind/lambda

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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)))
   ]
   ]
   ;
}

AltStyle によって変換されたページ (->オリジナル) /