将容器扩展到参数包

时间:2015-05-11 04:46:26

标签: c++ variadic-templates

让我们说我有一个变量函数,我不能这样改变:

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(),而不是仅仅传递原始参数。

最快和/或最好的方法是什么?感谢。

1 个答案:

答案 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