2017-04-17 23 views
-1

如何调用下面的getItem()函数?如何调用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

+2

定义“不工作”。怎么了? – emlai

+1

返回类型不是推导出来的,你需要明确地传递类型参数:'auto res = getItem (..'或'auto res getItem (...' –

+0

我很困惑为什么你正确地调用'pcall',但不是'getItem',看看它是如何是相同的情况。 – chris

回答

1

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

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

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

相关问题