2014-03-04 5 views
0

Я пытаюсь получить переменную из моего файла config.lua с помощью C++. Я создал Lua-класса из учебника, чтобы получить эти переменные, но I'am получаю ошибку при попытке вызова функции, который получает переменную из config.luaC++ error: no instance of function template

вот фрагменты кода:

LuaScript script("config.lua"); 
script.get(string("test")); 

I'am получает ошибку «не экземпляр шаблона функции не соответствует списку аргументов», в точке, где я называю «script.get (строка (» тест));»

шаблон функция и специализация выглядят так:

template<typename T> 
T get(const std::string &variableName) 
{ 
    if (!L) 
    { 
     printError(variableName, "Script not loaded"); 
     return lua_getdefault<T>(); 
    } 

    T result; 
    if (lua_gettostack(variableName)) 
    { 
     result = lua_get<T>(variableName); 
    }else{ 
     result = lua_getdefault<T>(); 
    } 

    clean(); 
    return result; 
} 

специализация:

template<> 
inline std::string LuaScript::lua_get<std::string>(const std::string &variableName) 
{ 
std::string s = "null"; 
if (lua_isstring(L, -1)) 
{ 
    s = std::string(lua_tostring(L, -1)); 
}else{ 
    printError(variableName, "Not a string"); 
} 

return s; 
} 

Просто для некоторой дополнительной информации, I'am кодирования и компиляции с Visual Studio 2012.

спасибо за вашу помощь :)

+1

'LuaScript :: lua_get' ** не специализация ** из ('get()'), который вы показываете. –

+0

так мне нужно написать специализацию или моя ошибка где-то еще? потому что функция get() вызывает lua_getdefault – chrisoo

+0

, кто ниспроверг, почему downvote? ОП не сказал, что специализация была для get(); они правильно показали специализацию lua_get для строки, так как это тот, который, по их мнению, был создан (но не был, согласно моему ответу). – Schollii

ответ

0

компилятор не знаете T вашего шаблона get(), поскольку это только возвращаемое значение (и даже если вы должны были присвоить возвращаемое значение переменной, C++ не выводит T на основе возвращаемых значений). Поэтому вы должны явно сообщить компилятору, что есть T. Кроме того, вам не нужно, чтобы создать строку временную, так как существует только один тип параметра возможно (const std::string&), так что попробуйте это:

script.get<std::string>("test"); 
Смежные вопросы