次のコードがあります。
template <typename T> LuaCall& operator>>(T) { BOOST_STATIC_ASSERT(sizeof(T) == 0); }
template <> LuaCall& operator>><int&>(int& val) { mResults.push_back(std::make_pair(LUA_RESULT_INTEGER, (void *)&val)); return *this; }
template <> LuaCall& operator>><float&>(float& val) { mResults.push_back(std::make_pair(LUA_RESULT_FLOAT, (void *)&val)); return *this; }
template <> LuaCall& operator>><double&>(double& val) { mResults.push_back(std::make_pair(LUA_RESULT_DOUBLE, (void *)&val)); return *this; }
template <> LuaCall& operator>><bool&>(bool& val) { mResults.push_back(std::make_pair(LUA_RESULT_BOOLEAN, (void *)&val)); return *this; }
template <> LuaCall& operator>><std::string&>(std::string& val) { mResults.push_back(std::make_pair(LUA_RESULT_STRING, (void *)&val)); return *this; }
template <> LuaCall& operator>><LuaNilStruct>(LuaNilStruct) { mResults.push_back(std::make_pair(LUA_RESULT_NIL, (void *)NULL)); return *this; }
その後:
int abc;
LuaCall(l, "test") % "test" % 5 % LuaNil % 2.333 >> abc;
cin >> のように動作するようにしたい。つまり、lua 関数の戻り値を abc に書き込む必要がある。だから私はそのアドレスが必要です..しかし、それはデフォルトのテンプレートでデフォルト設定されています。私は何を間違っていますか?cin がまさにそれを行うので、これを行う方法は確かにあります。
ありがとう!
% を >> に変更した人への注意: そのままなので元に戻しました :D コードは Lua 関数 test("test", 5, nil, 2.333) を呼び出し、その戻り値を abc に保存します。% は関数のパラメーター用、>> は戻り値用です。
template <typename T>
LuaCall& operator%(T val) {
mLua->Push(val);
++mArguments;
return *this;
}