C++调用JS,可变參模板实现,方便调用(cocos2d-x)
Posted ljbguanli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++调用JS,可变參模板实现,方便调用(cocos2d-x)相关的知识,希望对你有一定的参考价值。
#include "scripting/js-bindings/manual/ScriptingCore.h" #include <sstream> #include <type_traits> /// args push helper template<typename _Ty> inline void jsx_unpack_arg(std::stringstream& ss, int& carg, const _Ty& arg) { // template adapter: must be numeric type static_assert(std::is_integral<_Ty>::value || std::is_floating_point<_Ty>::value, "error, jsx_unpack: unsupported type!"); ss << arg << ","; ++carg; } inline void jsx_unpack_arg(std::stringstream& ss, int& /*carg*/) { // empty arg } inline void jsx_unpack_arg(std::stringstream& ss, int& carg, const char* arg) { // numbers ss << "\"" << arg << "\"" << ","; ++carg; } inline void jsx_unpack_arg(std::stringstream& ss, int& carg, const std::string& arg) { ss << "\"" << arg << "\"" << ","; ++carg; } template<typename _Ty, typename..._Args> inline void jsx_unpack_arg(std::stringstream& ss, int& carg, const _Ty& arg1, const _Args&...args) { jsx_unpack_arg(ss, carg, arg1); jsx_unpack_arg(ss, carg, args...); } template<typename..._Args> inline void jsx_vcall(const char* func, const _Args&...args) { std::stringstream sstreamArgs; sstreamArgs.precision(16); sstreamArgs << func << "("; int carg = 0; jsx_unpack_arg(sstreamArgs, carg, args...); auto actrualArgs = sstreamArgs.str(); if (carg != 0) actrualArgs.pop_back(); // pop last ‘,‘ actrualArgs.append(");"); jsval v1; if(!ScriptingCore::getInstance()->evalString(actrualArgs.c_str(), &v1)) { cocos2d::log("jsx_vcall call func:%s failed, please make sure config your project.json properly!"); } }
以上是关于C++调用JS,可变參模板实现,方便调用(cocos2d-x)的主要内容,如果未能解决你的问题,请参考以下文章