如何调用getItem?

时间:2017-04-17 15:57:28

标签: c++ auto

如何调用以下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);

以下是完整的源代码:

https://github.com/elelel/qluacpp

1 个答案:

答案 0 :(得分:1)

getItem模板需要知道调用时item_t是什么。在许多情况下,例如,如果您将正确类型的值作为参数传递(就像对应的setItem函数那样),编译器可以自行确定。

但是,由于根本没有任何参数与item_t相关,编译器无法知道item_t应该是什么,因此不知道如何实例化模板。

您需要显式指定调用时预期的项类型,与q.getItem<int>("all_trades", 0)一样,或者您需要找到一种方法来告诉编译器预期的类型是什么。我对Lua C ++ API不太熟悉,但可能与调用return_type时使用的pcall相同。