Я пишу вспомогательную функцию, которая должна сделать ее более простой и надежной для некоторых моих коллег из C/C++, чтобы получить именованные, скалярные значения параметров из хранилища параметров.Вызов функции шаблона через макрос, определяющий параметр?
Дело в том, что хранилище параметров может хранить только значения типа double
, но код, который будет вызывать эту функцию, является большой грязной кучей C, которая была преобразована в C++, поэтому есть места, где это может вызвать проблемы (или, по крайней мере, ложные предупреждения), чтобы просто сбросить double
, где, например, ожидается int
или long
.
Таким образом, у меня возникла идея сделать функцию-помощник функцией-шаблоном с типом возвращаемого значения, являющимся неопределенным аргументом шаблона. Таким образом, вызывающий должен вручную указать тип возвращаемого типа.
Однако аргумент функции является юникода строкой (const wchar_t*
), и я хотел, чтобы пользователи могли называть его, как они привыкли делать с символическими именами (сделано с помощью макросов, ранее) ..
Я не могу понять, как скомбинировать функцию функции шаблона, чтобы автоматически подкрепить аргумент! Может ли кто-нибудь предложить какое-то руководство? Я в основном ищу умный макро/шаблон взломать я думаю, по эстетическим причинам ;-)
В макросе:
// the return type is always double
#define GetParameter(parameterName) GetParameterFromParameterStore(L#parameterName)
В качестве функции шаблона:
// the user has to remember to pass the argument as a (wide) string
template<class T> T GetParameter(const wchar_t* parameterName)
{
return (T)GetParameterFromParameterStore(parameterName);
}
Edit: В идеале я хотел бы назвать функцию:
int _volumePct = GetParameter<int>(VolumeInPercent);
(без дополнительной отделки или син налог).
Да, но он искупил функцию, чтобы передать результат другим типам. –
Это ответ? –
OP хочет использовать шаблоны для преобразования double в другие типы, такие как int или long, чтобы подавлять предупреждения компилятора. –