2017-04-17 3 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

반환 형식이 도출되지 않고, 명시 적 형식 매개 변수를 전달해야합니다'자동 고해상도 =의 getItem (..' 또는 '자동 고해상도의 getItem (...' –

+0

제대로'pcall' 전화를 왜 혼란 스러워요, 'getItem'이 아니라, 어떻게 같은 상황인지 알 수 있습니다. – chris

답변

1

getItem 템플릿은이 호출 할 때 item_t이 무엇인지 알 필요가있다. (만약 대응 setItem 함수 것처럼), 컴파일러는 자체적으로이를 결정할 수 많은 경우에는 이러한 매개 변수와 같은 정확한 타입의 값을 전달하는 것처럼.

그러나 아무 매개 변수도 전혀 item_t과 관련되어 보이지 않으므로 컴파일러는 item_t이 무엇인지 알 수 없으므로 템플릿을 인스턴스화하는 방법을 알지 못합니다.

q.getItem<int>("all_trades", 0)과 같이 예상되는 항목 유형이 무엇인지 명시 적으로 지정하거나 예상되는 유형이 다른 방식인지 컴파일러에 알리는 방법을 찾아야합니다. 나는 Lua C++ API에 대해 잘 알고 있지는 않지만 아마도 pcall을 호출 할 때 사용하는 return_type과 같을 것입니다.

관련 문제