#include #include class Test { public: void function() {} std::string function2() { return "Function2"; } void function3() {} std::string functionOverload(double) { return "double"; } std::string functionOverload(int) { return "int"; } }; int main() { chaiscript::ModulePtr m = chaiscript::ModulePtr(new chaiscript::Module()); using namespace chaiscript; chaiscript::utility::add_class(*m, "Test", { constructor(), constructor() }, { {fun(&Test::function), "function"}, {fun(&Test::function2), "function2"}, {fun(&Test::function3), "function3"}, {fun(&Test::functionOverload), "functionOverload"}, {fun(&Test::functionOverload), "functionOverload"}, {fun(&Test::operator=), "="} } ); chaiscript::ChaiScript chai(chaiscript::Std_Lib::library());; chai.add(m); if (chai.eval("auto t = Test(); t.function2(); ") == "Function2" && chai.eval("auto t = Test(); t.functionOverload(1); ") == "int" && chai.eval("auto t = Test(); t.functionOverload(1.1); ") == "double") { chai.eval("t = Test();"); return EXIT_SUCCESS; } else { return EXIT_FAILURE; } }