boost bind/lambda

beo wulf <[email protected]>
Newsgroups gmane.comp.lang.lua.bind.user
Message-ID <[email protected]>
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)))
    ]
    ]

    ;
}

------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.