Code cleanups
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
|
|
||||||
|
#include "../chaiscript_defines.hpp"
|
||||||
#include "type_info.hpp"
|
#include "type_info.hpp"
|
||||||
|
|
||||||
namespace chaiscript {
|
namespace chaiscript {
|
||||||
@@ -28,14 +29,14 @@ namespace chaiscript
|
|||||||
class bad_boxed_cast : public std::bad_cast
|
class bad_boxed_cast : public std::bad_cast
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bad_boxed_cast(const Type_Info &t_from, const std::type_info &t_to,
|
bad_boxed_cast(Type_Info t_from, const std::type_info &t_to,
|
||||||
std::string t_what) CHAISCRIPT_NOEXCEPT
|
std::string t_what) CHAISCRIPT_NOEXCEPT
|
||||||
: from(t_from), to(&t_to), m_what(std::move(t_what))
|
: from(std::move(t_from)), to(&t_to), m_what(std::move(t_what))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bad_boxed_cast(const Type_Info &t_from, const std::type_info &t_to) CHAISCRIPT_NOEXCEPT
|
bad_boxed_cast(Type_Info t_from, const std::type_info &t_to)
|
||||||
: from(t_from), to(&t_to), m_what("Cannot perform boxed_cast")
|
: from(std::move(t_from)), to(&t_to), m_what("Cannot perform boxed_cast")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -18,16 +18,16 @@ namespace chaiscript
|
|||||||
{
|
{
|
||||||
static std::tuple<decltype(std::placeholders::_1),decltype(std::placeholders::_2),decltype(std::placeholders::_3),decltype(std::placeholders::_4),decltype(std::placeholders::_5),decltype(std::placeholders::_6),decltype(std::placeholders::_7),decltype(std::placeholders::_8),decltype(std::placeholders::_9),decltype(std::placeholders::_10)> placeholder() {
|
static std::tuple<decltype(std::placeholders::_1),decltype(std::placeholders::_2),decltype(std::placeholders::_3),decltype(std::placeholders::_4),decltype(std::placeholders::_5),decltype(std::placeholders::_6),decltype(std::placeholders::_7),decltype(std::placeholders::_8),decltype(std::placeholders::_9),decltype(std::placeholders::_10)> placeholder() {
|
||||||
return std::tuple<decltype(std::placeholders::_1),decltype(std::placeholders::_2),decltype(std::placeholders::_3),decltype(std::placeholders::_4),decltype(std::placeholders::_5),decltype(std::placeholders::_6),decltype(std::placeholders::_7),decltype(std::placeholders::_8),decltype(std::placeholders::_9),decltype(std::placeholders::_10)>(std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5,std::placeholders::_6,std::placeholders::_7,std::placeholders::_8,std::placeholders::_9,std::placeholders::_10);
|
return std::tuple<decltype(std::placeholders::_1),decltype(std::placeholders::_2),decltype(std::placeholders::_3),decltype(std::placeholders::_4),decltype(std::placeholders::_5),decltype(std::placeholders::_6),decltype(std::placeholders::_7),decltype(std::placeholders::_8),decltype(std::placeholders::_9),decltype(std::placeholders::_10)>(std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5,std::placeholders::_6,std::placeholders::_7,std::placeholders::_8,std::placeholders::_9,std::placeholders::_10);
|
||||||
};
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<int count, int maxcount, typename Sig>
|
template<int count, int maxcount, typename Sig>
|
||||||
struct Bind_First
|
struct Bind_First
|
||||||
{
|
{
|
||||||
template<typename F, typename ... InnerParams>
|
template<typename F, typename ... InnerParams>
|
||||||
static std::function<Sig> bind(F f, InnerParams ... innerparams)
|
static std::function<Sig> bind(F&& f, InnerParams ... innerparams)
|
||||||
{
|
{
|
||||||
return Bind_First<count - 1, maxcount, Sig>::bind(f, innerparams..., std::get<maxcount - count>(Placeholder::placeholder()));
|
return Bind_First<count - 1, maxcount, Sig>::bind(std::forward<F>(f), innerparams..., std::get<maxcount - count>(Placeholder::placeholder()));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -35,37 +35,42 @@ namespace chaiscript
|
|||||||
struct Bind_First<0, maxcount, Sig>
|
struct Bind_First<0, maxcount, Sig>
|
||||||
{
|
{
|
||||||
template<typename F, typename ... InnerParams>
|
template<typename F, typename ... InnerParams>
|
||||||
static std::function<Sig> bind(F f, InnerParams ... innerparams)
|
static std::function<Sig> bind(F&& f, InnerParams ... innerparams)
|
||||||
{
|
{
|
||||||
return std::bind(f, innerparams...);
|
return std::bind(std::forward<F>(f), innerparams...);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<typename O, typename Ret, typename P1, typename ... Param>
|
template<typename O, typename Ret, typename P1, typename ... Param>
|
||||||
std::function<Ret (Param...)> bind_first(Ret (*f)(P1, Param...), O o)
|
std::function<Ret (Param...)> bind_first(Ret (*f)(P1, Param...), O&& o)
|
||||||
{
|
{
|
||||||
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(f, o);
|
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(f, std::forward<O>(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename O, typename Ret, typename Class, typename ... Param>
|
template<typename O, typename Ret, typename Class, typename ... Param>
|
||||||
std::function<Ret (Param...)> bind_first(Ret (Class::*f)(Param...), O o)
|
std::function<Ret (Param...)> bind_first(Ret (Class::*f)(Param...), O&& o)
|
||||||
{
|
{
|
||||||
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(f, o);
|
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(f, std::forward<O>(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename O, typename Ret, typename Class, typename ... Param>
|
template<typename O, typename Ret, typename Class, typename ... Param>
|
||||||
std::function<Ret (Param...)> bind_first(Ret (Class::*f)(Param...) const, O o)
|
std::function<Ret (Param...)> bind_first(Ret (Class::*f)(Param...) const, O&& o)
|
||||||
{
|
{
|
||||||
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(f, o);
|
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(f, std::forward<O>(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename O, typename Ret, typename P1, typename ... Param>
|
template<typename O, typename Ret, typename P1, typename ... Param>
|
||||||
std::function<Ret (Param...)> bind_first(const std::function<Ret (P1, Param...)> &f, O o)
|
std::function<Ret (Param...)> bind_first(const std::function<Ret (P1, Param...)> &f, O&& o)
|
||||||
{
|
{
|
||||||
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(f, o);
|
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(f, std::forward<O>(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename O, typename Ret, typename P1, typename ... Param>
|
||||||
|
std::function<Ret (Param...)> bind_first(std::function<Ret (P1, Param...)> &&f, O&& o)
|
||||||
|
{
|
||||||
|
return Bind_First<sizeof...(Param), sizeof...(Param), Ret (Param...)>::bind(std::move(f), std::forward<O>(o));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@ class BaseClass
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~BaseClass() = default;
|
virtual ~BaseClass() {}
|
||||||
|
|
||||||
virtual std::string doSomething(float, double) const = 0;
|
virtual std::string doSomething(float, double) const = 0;
|
||||||
|
|
||||||
@@ -42,14 +42,14 @@ class ChaiScriptDerived : public BaseClass
|
|||||||
tie(t_funcs.at(1), m_validateValueImpl);
|
tie(t_funcs.at(1), m_validateValueImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string doSomething(float f, double d) const override
|
std::string doSomething(float f, double d) const CHAISCRIPT_OVERRIDE
|
||||||
{
|
{
|
||||||
assert(m_doSomethingImpl);
|
assert(m_doSomethingImpl);
|
||||||
return m_doSomethingImpl(*this, f, d);
|
return m_doSomethingImpl(*this, f, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool validateValue(const std::string &t_val) override
|
bool validateValue(const std::string &t_val) CHAISCRIPT_OVERRIDE
|
||||||
{
|
{
|
||||||
assert(m_validateValueImpl);
|
assert(m_validateValueImpl);
|
||||||
return m_validateValueImpl(*this, t_val);
|
return m_validateValueImpl(*this, t_val);
|
||||||
|
Reference in New Issue
Block a user