通过参数字符串化宏调用模板函数?

时间:2013-10-05 16:38:25

标签: c++ templates macros

我正在编写一个辅助函数,它应该使我的一些(C / C ++新手)同事更简单,更简单,从参数存储中检索命名的标量参数值。

问题是,参数存储只能存储类型double的值,但是调用此函数的代码是一堆乱七八糟的C转换为C ++,所以有些地方它可能导致问题(或至少是虚假的警告)只是将double转储到例如预计会intlong

所以我想让辅助函数成为模板函数,返回类型是一个未指定的模板参数 - 这样,调用者必须手动指定返回类型应该是什么。

但是,该函数的参数是一个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);
}

编辑:理想情况下,我希望能够调用函数:

int _volumePct = GetParameter<int>(VolumeInPercent);

(没有任何额外的装饰或语法)。

1 个答案:

答案 0 :(得分:1)

一种方法是制作一个新的宏来进行字符串化

#define Stringify(parameter) L#parameter

并将其传递给GetParameter模板函数,如下所示:

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

这是你想要做的吗?但是,我觉得最好使用现有的宏来输出结果。