One more file no longer using boost_pp
This commit is contained in:
parent
d5e1650167
commit
f996c0df37
@ -4,21 +4,36 @@
|
|||||||
// and Jason Turner (jason@emptycrate.com)
|
// and Jason Turner (jason@emptycrate.com)
|
||||||
// http://www.chaiscript.com
|
// http://www.chaiscript.com
|
||||||
|
|
||||||
#include <boost/preprocessor.hpp>
|
|
||||||
|
|
||||||
#ifndef BOOST_PP_IS_ITERATING
|
|
||||||
#ifndef CHAISCRIPT_PROXY_CONSTRUCTORS_HPP_
|
#ifndef CHAISCRIPT_PROXY_CONSTRUCTORS_HPP_
|
||||||
#define CHAISCRIPT_PROXY_CONSTRUCTORS_HPP_
|
#define CHAISCRIPT_PROXY_CONSTRUCTORS_HPP_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define BOOST_PP_ITERATION_LIMITS ( 0, 10 )
|
|
||||||
#define BOOST_PP_FILENAME_1 <chaiscript/dispatchkit/proxy_constructors.hpp>
|
|
||||||
#include BOOST_PP_ITERATE()
|
|
||||||
# endif
|
|
||||||
|
|
||||||
namespace chaiscript
|
namespace chaiscript
|
||||||
{
|
{
|
||||||
|
namespace dispatch
|
||||||
|
{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A constructor function, used for creating a new object
|
||||||
|
* of a given type with a given set of params
|
||||||
|
*/
|
||||||
|
template<typename Class, typename ... Params>
|
||||||
|
std::shared_ptr<Class> constructor_(Params ... params)
|
||||||
|
{
|
||||||
|
return std::shared_ptr<Class>(new Class(params...));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Class, typename ... Params >
|
||||||
|
Proxy_Function build_constructor_(Class (*)(Params...))
|
||||||
|
{
|
||||||
|
typedef std::shared_ptr<Class> (sig)(Params...);
|
||||||
|
return Proxy_Function(new Proxy_Function_Impl<sig>(std::function<sig>(&(constructor_<Class, Params...>))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// \brief Generates a constructor function for use with ChaiScript
|
/// \brief Generates a constructor function for use with ChaiScript
|
||||||
///
|
///
|
||||||
/// \tparam T The signature of the constructor to generate. In the form of: ClassType (ParamType1, ParamType2, ...)
|
/// \tparam T The signature of the constructor to generate. In the form of: ClassType (ParamType1, ParamType2, ...)
|
||||||
@ -36,43 +51,8 @@ namespace chaiscript
|
|||||||
T *f = 0;
|
T *f = 0;
|
||||||
return (dispatch::detail::build_constructor_(f));
|
return (dispatch::detail::build_constructor_(f));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
# define n BOOST_PP_ITERATION()
|
|
||||||
|
|
||||||
namespace chaiscript
|
|
||||||
{
|
|
||||||
namespace dispatch
|
|
||||||
{
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* A constructor function, used for creating a new object
|
|
||||||
* of a given type with a given set of params
|
|
||||||
*/
|
|
||||||
template<typename Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param) >
|
|
||||||
std::shared_ptr<Class> constructor_( BOOST_PP_ENUM_BINARY_PARAMS(n, Param, p) )
|
|
||||||
{
|
|
||||||
return std::shared_ptr<Class>(new Class( BOOST_PP_ENUM_PARAMS(n, p) ));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function for build a constructor function
|
|
||||||
* example:
|
|
||||||
* dispatchengine.register_function(build_constructor<MyClass, int, const std::string&>, "MyClass");
|
|
||||||
* \todo See if it is possible to make this not be a variadic function
|
|
||||||
*/
|
|
||||||
template<typename Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param) >
|
|
||||||
Proxy_Function build_constructor_(Class (*)(BOOST_PP_ENUM_PARAMS(n, Param)))
|
|
||||||
{
|
|
||||||
typedef std::shared_ptr<Class> (sig)(BOOST_PP_ENUM_PARAMS(n, Param));
|
|
||||||
return Proxy_Function(new Proxy_Function_Impl<sig>(std::function<sig>(&(constructor_<Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, Param)>))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#undef n
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user