让我们说我有一个变量函数,我不能这样改变:
void Func(int count, ...)
{ /*etc.*/ }
我正在编写一个类似于它的变量模板来包装该函数并使其更安全:
template<typename... T>
void ToString(T... args)
{
std::vector<CString> vstrArgs = { args... };
Func(sizeof...(args), args...);
}
所以我的模板验证每个参数都可以转换为CString。 我想要做的不仅仅是这样,我想将每个参数转换为CString,然后将这些CStrings传递给Func(),而不是仅仅传递原始参数。
最快和/或最好的方法是什么?感谢。
答案 0 :(得分:4)
template<typename... T>
void ToString(T... args)
{
Func(sizeof...(args), ConvertToCString(args)...);
}
其中ConvertToCString
是将任何元素转换为CString的函数。如果构造函数足够,那么CString(args)...
将起作用。 static_cast<CString>(args)...
也可以。
您可以查看&#34;打包扩展&#34;来自parameter packs。