Я использую ChaiScript 5.3.1 и пытаюсь связать функции с моим собственным классом, в частности функцию setPosition, которая может принимать либо Vector3, либо 3 числа с плавающей запятой.
Класс и его соответствующие методы объявлены так:
class DLLExport Actor
{
public:
Actor(Level* level, const String& name, Actor* parent);
virtual ~Actor();
void setPosition(const Real& x, const Real& y, const Real& z);
void setPosition(const Vector3& position);
};
и я пытаюсь связать их так:
m->add(user_type<Actor>(), "Actor");
m->add(fun<void (Actor::*)(const Vector3&)>(&Actor::setPosition), "setPosition");
Это приводит к следующему выводу компилятора (Windows, MSVC 2013):
2functional(550): error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
2> with
2> [
2> _Fty=void (__thiscall Actor::* )(const Vector3 &)
2> ]
2> ..\..\ScriptingDemo\Binder.cpp(60) : see reference to class template instantiation 'std::function<void (__thiscall Actor::* )(const Vector3 &)>' being compiled
2functional(551): error C2504: 'type' : base class undefined
2functional(554): error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
2> with
2> [
2> _Fty=void (__thiscall Actor::* )(const Vector3 &)
2> ]
2functional(554): error C2146: syntax error : missing ';' before identifier '_Mybase'
2functional(554): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
fun
таким же, какstd::function<T>
? - person Piotr Skotnicki   schedule 25.08.2014fun
означающимstd::function
. Вы не вызываетеchaiscript::fun
. Выясните, почему. - person Igor Tandetnik   schedule 25.08.2014std::function<void(Actor*, Vector3&)> setPos = &Crimson::Actor::setPosition;
(адаптировано из информации в ответе, за который проголосовали) - person Ilija Boshkov   schedule 25.08.2014