扩展容器到参数包
Expanding container to parameter pack
假设我有一个可变函数,我不能这样改变:
void Func(int count, ...)
{ /*etc.*/ }
我正在编写一个类似这样的可变参数模板来包装该函数并使其使用起来更安全:
template<typename... T>
void ToString(T... args)
{
std::vector<CString> vstrArgs = { args... };
Func(sizeof...(args), args...);
}
所以我的模板验证每个参数都可以转换为 CString。
然而,我想做的不止于此,我想将每个参数转换为 CString,然后将这些 CString 传递给 Func(),而不是仅仅传递原始参数。
最快 and/or 最巧妙的方法是什么?谢谢
template<typename... T>
void ToString(T... args)
{
Func(sizeof...(args), ConvertToCString(args)...);
}
其中 ConvertToCString
是将任何元素转换为 CString 的函数。如果构造函数足够,那么 CString(args)...
就可以了。 static_cast<CString>(args)...
也可以。
您可以从 parameter packs 查看 "Pack expansion"。
假设我有一个可变函数,我不能这样改变:
void Func(int count, ...)
{ /*etc.*/ }
我正在编写一个类似这样的可变参数模板来包装该函数并使其使用起来更安全:
template<typename... T>
void ToString(T... args)
{
std::vector<CString> vstrArgs = { args... };
Func(sizeof...(args), args...);
}
所以我的模板验证每个参数都可以转换为 CString。 然而,我想做的不止于此,我想将每个参数转换为 CString,然后将这些 CString 传递给 Func(),而不是仅仅传递原始参数。
最快 and/or 最巧妙的方法是什么?谢谢
template<typename... T>
void ToString(T... args)
{
Func(sizeof...(args), ConvertToCString(args)...);
}
其中 ConvertToCString
是将任何元素转换为 CString 的函数。如果构造函数足够,那么 CString(args)...
就可以了。 static_cast<CString>(args)...
也可以。
您可以从 parameter packs 查看 "Pack expansion"。