cppbind.Ghost: more member overloads.

This commit is contained in:
Thomas Geymayer
2014-05-18 23:54:59 +02:00
parent a9e7af6e6e
commit 1af6cbc1aa
2 changed files with 57 additions and 4 deletions

View File

@@ -467,6 +467,22 @@ namespace nasal
return member(field, to_getter(getter), to_setter(setter));
}
template<class Param>
Ghost& member( const std::string& field,
const getter_t& getter,
void (raw_type::*setter)(Param) )
{
return member(field, getter, to_setter(setter));
}
template<class Ret>
Ghost& member( const std::string& field,
Ret (raw_type::*getter)() const,
const setter_t& setter )
{
return member(field, to_getter(getter), setter);
}
/**
* Register a read only member variable.
*
@@ -480,6 +496,18 @@ namespace nasal
return member(field, to_getter(getter), setter_t());
}
Ghost& member( const std::string& field,
naRef (*getter)(const raw_type&, naContext) )
{
return member(field, getter_t(getter), setter_t());
}
Ghost& member( const std::string& field,
naRef (*getter)(raw_type&, naContext) )
{
return member(field, getter_t(getter), setter_t());
}
/**
* Register a write only member variable.
*
@@ -493,6 +521,18 @@ namespace nasal
return member(field, getter_t(), to_setter(setter));
}
Ghost& member( const std::string& field,
void (*setter)(raw_type&, naContext, naRef) )
{
return member(field, getter_t(), setter_t(setter));
}
Ghost& member( const std::string& field,
const setter_t& setter )
{
return member(field, getter_t(), setter);
}
/**
* Register a member variable by passing a getter and/or setter method.
*
@@ -550,7 +590,7 @@ namespace nasal
* {
* public:
* bool getMember( const std::string& key,
* std::string& value_out );
* std::string& value_out ) const;
* }
*
* Ghost<MyClassPtr>::init("Test")
@@ -558,7 +598,7 @@ namespace nasal
* @endcode
*/
template<class Param>
Ghost& _get(bool (raw_type::*getter)(const std::string&, Param&))
Ghost& _get(bool (raw_type::*getter)(const std::string&, Param&) const)
{
return _get(
boost::function<bool (raw_type&, const std::string&, Param&)>(getter)
@@ -584,7 +624,7 @@ namespace nasal
*/
Ghost& _get(bool (raw_type::*getter)( naContext,
const std::string&,
naRef& ))
naRef& ) const)
{
return _get( fallback_getter_t(getter) );
}

View File

@@ -44,7 +44,7 @@ struct Base
{
return key == "test";
}
bool genericGet(const std::string& key, std::string& val_out)
bool genericGet(const std::string& key, std::string& val_out) const
{
if( key != "get_test" )
return false;
@@ -67,6 +67,16 @@ struct Derived:
int getX() const { return _x; }
void setX(int x) { _x = x; }
};
naRef f_derivedGetRandom(const Derived&, naContext)
{
return naNil();
}
void f_derivedSetX(Derived& d, naContext, naRef r)
{
d._x = static_cast<int>(naNumValue(r).num);
}
struct DoubleDerived:
public Derived
{
@@ -237,6 +247,9 @@ int main(int argc, char* argv[])
.bases<BasePtr>()
.member("x", &Derived::getX, &Derived::setX)
.member("x_alternate", &f_derivedGetX)
.member("x_mixed", &f_derivedGetRandom, &Derived::setX)
.member("x_mixed2", &Derived::getX, &f_derivedSetX)
.member("x_w", &f_derivedSetX)
.method("free_fn", &derivedFreeMember)
.method("free_member", &derivedFreeMember)
.method("baseDoIt", &baseFuncCallContext);