2017-04-17 26 views
-1

Wie kann ich die folgende getItem() Funktion aufrufen?Wie ruft getItem auf?

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); 
} 

funktioniert das nicht:

auto item = q.getItem("all_trades", 0); 

ist die vollständige Quellcode:

https://github.com/elelel/qluacpp

+2

Definieren Sie "nicht arbeiten". Was geschieht? – emlai

+1

Rückgabetyp wird nicht abgeleitet, Sie müssen Typparameter explizit übergeben: 'auto res = getItem (..' oder' auto res getItem (... ' –

+0

Ich bin verwirrt, warum Sie' pcall' richtig nennen, aber nicht "getItem", da es sich um die gleiche Situation handelt. – chris

Antwort

1

Die getItem Vorlage muss wissen, was item_t ist, wenn es aufgerufen wird. In vielen Fällen, beispielsweise wenn Sie einen Wert des richtigen Typs als Parameter übergeben haben (wie bei einer entsprechenden setItem-Funktion), kann der Compiler dies selbst bestimmen.

Da jedoch keiner der Parameter überhaupt auf item_t bezogen zu sein scheint, kann der Compiler nicht wissen, was item_t sein sollte, und weiß daher nicht, wie die Vorlage instanziiert werden soll.

Sie müssen entweder explizit angeben, wie der erwartete Elementtyp beim Aufruf lautet, z. B. q.getItem<int>("all_trades", 0), oder Sie müssen einen Weg finden, dem Compiler mitzuteilen, welcher Typ erwartet wird. Ich bin nicht vertraut genug mit der Lua C++ API, um sicher zu sein, aber vielleicht wäre das das gleiche wie die return_type, die Sie verwenden, wenn Sie pcall aufrufen.

Verwandte Themen