Вызов функции шаблона через макрос для строкового параметра?

0

Я пишу вспомогательную функцию, которая должна сделать ее более простой и надежной для некоторых (C/C++ новичков) моих коллег, чтобы получить именованные, скалярные значения параметров из хранилища параметров.

Дело в том, что хранилище параметров может хранить только значения типа double, но код, который будет вызывать эту функцию, представляет собой большую грязную кучу C, которая была преобразована в C++, поэтому есть места, где это может вызвать проблемы (или по крайней мере, ложные предупреждения), чтобы просто сбросить double где, например, ожидается int или long.

Поэтому у меня возникла идея сделать функцию-помощник функцией-шаблоном с типом возвращаемого значения, являющимся неопределенным аргументом шаблона. Таким образом, вызывающий должен вручную указать тип возвращаемого типа.

Однако аргумент функции является строкой unicode (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);

(без дополнительного оформления или синтаксиса).

Теги:
templates
macros

1 ответ

1

Один из способов - сделать новый макрос

#define Stringify(parameter) L#parameter

и передать его в функцию шаблона GetParameter, как показано ниже:

GetParameter<int>(Stringify(hello there));

Это то, что вы пытаетесь сделать? но тогда я считаю, что лучше просто набирать результат с помощью существующего макроса.

  • 0
    да, но он шаблонизировал функцию для приведения результата к другим типам.
  • 0
    Это ответ?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню