2017-04-17 42 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相同。

相關問題