如何调用以下getItem()
功能?
template <typename item_t>
item_t getItem(const char* table_name, const int index) const {
const char api_name[] = "getItem";
typedef std::tuple<item_t> return_type;
auto params = std::make_tuple(table_name, index);
auto result = lua_.pcall<return_type>(api_name, params);
return std::get<0>(result);
}
这不起作用:
auto item = q.getItem("all_trades", 0);
以下是完整的源代码:
答案 0 :(得分:1)
getItem
模板需要知道调用时item_t
是什么。在许多情况下,例如,如果您将正确类型的值作为参数传递(就像对应的setItem
函数那样),编译器可以自行确定。
但是,由于根本没有任何参数与item_t
相关,编译器无法知道item_t
应该是什么,因此不知道如何实例化模板。
您需要显式指定调用时预期的项类型,与q.getItem<int>("all_trades", 0)
一样,或者您需要找到一种方法来告诉编译器预期的类型是什么。我对Lua C ++ API不太熟悉,但可能与调用return_type
时使用的pcall
相同。