Ошибка анализа файла example.txt. Значение ("notaninteger") [MySectiom]Key не является допустимым целым числом.
Я могу определить имена файлов, разделов и ключей. из аргументов, переданных функции шаблона, и переменных-членов в классе, однако я не уверен, как получить имя типа, в который пытается преобразовать функция шаблона.
Мой текущий код со специализацией только для простых строк и тому подобного выглядит так:
Код: Выделить всё
template T GetValue(const std::wstring §ion, const std::wstring &key)
{
std::map::iterator it = map[section].find(key);
if(it == map[section].end())
throw ItemDoesNotExist(file, section, key)
else
{
try{return boost::lexical_cast(it->second);}
//needs to get the name from T somehow
catch(...)throw ParseError(file, section, key, it->second, TypeName(T));
}
}
Кроме того, мне нужно решение, которое не влечет за собой каких-либо накладных расходов во время выполнения, если не возникает исключение, то есть решение, полностью требующее времени компиляции, — это то, что мне нужно, поскольку этот код вызывается много раз, а время загрузки уже становится несколько долгим. .
РЕДАКТИРОВАТЬ: Хорошо, это решение, которое я придумал:
У меня есть type.h, содержащий подписка
Код: Выделить всё
#pragma once
template const wchar_t *GetTypeName();
#define DEFINE_TYPE_NAME(type, name) \
templateconst wchar_t *GetTypeName(){return name;}
Тогда компоновщик сможет найти подходящую специализацию шаблона, если она где-то определена, или в противном случае выдать ошибку компоновщика, чтобы я мог добавить тип.
Тогда компоновщик сможет найти подходящую специализацию шаблона, если она где-то определена, или в противном случае выдать ошибку компоновщика, чтобы я мог добавить тип.
Тогда компоновщик сможет найти подходящую специализацию шаблона, если она где-то определена.>
Подробнее здесь: https://stackoverflow.com/questions/105 ... n-template