C++ 将容器扩展到参数包

C++ 将容器扩展到参数包,c++,variadic-templates,C++,Variadic Templates,假设我有一个可变函数,我不能这样改变: void Func(int count, ...) { /*etc.*/ } 我正在编写一个可变模板,这样可以包装该函数并使其使用更安全: template<typename... T> void ToString(T... args) { std::vector<CString> vstrArgs = { args... }; Func(sizeof...(args), args...); } 模板 无效ToS

假设我有一个可变函数,我不能这样改变:

void Func(int count, ...)
{ /*etc.*/ }
我正在编写一个可变模板,这样可以包装该函数并使其使用更安全:

template<typename... T>
void ToString(T... args)
{
    std::vector<CString> vstrArgs = { args... };
    Func(sizeof...(args), args...);
}
模板
无效ToString(T…args)
{
std::vector vstrArgs={args…};
Func(sizeof…(args),args;
}
因此,我的模板验证每个参数都可以转换为CString。 我想做的不止这些,但是,我想将每个参数转换为CString,然后将这些CString传递给Func(),而不仅仅是传递原始参数

最快和/或最整洁的方法是什么?谢谢。

模板
template<typename... T>
void ToString(T... args)
{
    Func(sizeof...(args), ConvertToCString(args)...);
}
无效ToString(T…args) { Func(sizeof…(args),ConvertToCString(args…); }
其中
ConvertToCString
是将任何元素转换为CString的函数。如果构造函数足够,那么
CString(args)…
将起作用<代码>静态_cast(args).也可以工作


您可以从中查看“Pack expansion”。

可能将args参数Pack存储到一个std::tuple中,然后像这里一样迭代该tuple,检查它是否可以转换并执行您想要的操作:顺便说一句,您不应该将非POD类型的参数传递给VARARG的函数。即使是。您可以省略
向量
并使用
std::forward(args)
@Jarod42:这是真的