0

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

问题是,参数存储只能存储 type 的值double,但是将调用此函数的代码是一大堆杂乱无章的 C 已转换为 C++,因此有些地方可能会导致问题(或至少是虚假的)警告)只是将 a 转储到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);

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

4

1 回答 1

1

One way is to make a new macro to stringify

#define Stringify(parameter) L#parameter

and to pass it to GetParameter template function as below:

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

Is this what you are trying to do? but then, I feel it is better to just type-cast the result using the existing macro.

于 2013-10-05T17:17:05.030 回答