2017-04-17 2 views
-1

Comment puis-je appeler la fonction getItem() ci-dessous?Comment appeler 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); 
} 

Cela ne fonctionne pas:

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

Voici le code source complet:

https://github.com/elelel/qluacpp

+2

Définir "ne fonctionne pas". Ce qui se produit? – emlai

+1

le type de retour n'est pas déduit, vous devrez passer le paramètre de type explicitement: 'auto res = getItem (..' ou' auto res getItem (... ' –

+0

Je suis confus pourquoi vous appelez' pcall' correctement, mais pas 'getItem', vu que c'est la même situation. – chris

Répondre

1

Le modèle getItem a besoin de savoir ce que item_t est quand il est appelé. Dans de nombreux cas, comme si vous transmettiez une valeur du type correct en tant que paramètre (comme vous le feriez pour une fonction setItem correspondante), le compilateur peut le déterminer lui-même.

Cependant, comme aucun des paramètres ne semble lié à item_t, le compilateur ne peut pas savoir ce que doit être item_t et ne sait donc pas comment instancier le modèle.

Vous devez spécifier explicitement le type d'élément attendu lorsque vous appelez, comme avec q.getItem<int>("all_trades", 0), ou vous devez trouver un moyen de dire au compilateur quel est le type attendu d'une autre manière. Je ne suis pas assez familier avec l'API Lua C++ pour être sûr, mais peut-être que ce serait le même que le return_type que vous utilisez en appelant pcall.