2017-04-17 19 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); 
} 

これは動作しません:

https://github.com/elelel/qluacpp

+2

「作業しない」を定義します。何が起こるのですか? – emlai

+1

戻り値の型が推測されない場合、型パラメータを明示的に渡す必要があります: 'auto res = getItem (..'または' auto res getItem (... ' –

+0

' 'getItem'ではなく、同じ状況であると見なします。 – chris

答えて

1

getItemテンプレートは、それが呼ばれていたときにitem_tが何であるかを知る必要があります:

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

ここで完全なソースコードです。多くの場合、(対応するsetItem関数の場合のように)正しい型の値をパラメータとして渡した場合など、コンパイラはこれを単独で判断できます。

しかし、いずれのパラメータもitem_tに関連しているように見えないので、コンパイラはitem_tが何であるべきかを知ることができないため、テンプレートのインスタンス化の仕方がわかりません。

q.getItem<int>("all_trades", 0)のように、呼び出すときに期待される項目の種類を明示的に指定するか、予想される種類が何か別の方法であることをコンパイラに知らせる方法を見つける必要があります。私はLua C++ APIには慣れ親しんでいませんが、pcallを呼び出す際に使用するreturn_typeと同じである可能性があります。

関連する問題