C++ 使用 next 函数 returns nothing 解压可变参数模板参数
C++ unpack variadic template arguments with the next function returns nothing
我正在尝试将参数扩展为可变参数函数。下面的代码工作得很好
template<typename T>
int printMy (const T& f)
{
cout << f << endl;
}
template<typename... Types>
void print (Types... args)
{
auto i = {printMy(args)...};
}
int main() {
std::string s("world");
print(7.5, "hello", s);
return 0;
}
但是,我真的不想 return 函数中的任何内容。我实际上希望它是无效的。但是,当我有如下代码时,它不起作用
template<typename T>
void printMy (const T& f)
{
cout << f << endl;
}
template<typename... Types>
void print (Types... args)
{
{printMy(args)...};
// same thing if I remove the brackets
// printMy(args)...;
}
它在“{printMy(args)...};”行给我一个错误。错误是“表达式包含未扩展的参数包 'args'”
您可以在 C++17 中使用 fold expression 来计算对参数包的所有参数使用二元运算符的结果,以解决如下所示的问题。显示的程序使用 一元右折叠 来达到预期的效果。
template<typename... Types>
void print (Types... args)
{
(printMy(args), ...);//uses fold expression in C++17
}
从 C++17 开始,您可以使用
template<typename... Types>
void print (Types... args)
{
(printMy(args), ...);
}
在此之前,你必须使用类似于你所做的技巧:
template<typename... Types>
void print (Types... args)
{
const int dummy[] = {0, (printMy(args), 0)...};
static_cast<void>(dummy); // Avoid warning for unused variable
}
我正在尝试将参数扩展为可变参数函数。下面的代码工作得很好
template<typename T>
int printMy (const T& f)
{
cout << f << endl;
}
template<typename... Types>
void print (Types... args)
{
auto i = {printMy(args)...};
}
int main() {
std::string s("world");
print(7.5, "hello", s);
return 0;
}
但是,我真的不想 return 函数中的任何内容。我实际上希望它是无效的。但是,当我有如下代码时,它不起作用
template<typename T>
void printMy (const T& f)
{
cout << f << endl;
}
template<typename... Types>
void print (Types... args)
{
{printMy(args)...};
// same thing if I remove the brackets
// printMy(args)...;
}
它在“{printMy(args)...};”行给我一个错误。错误是“表达式包含未扩展的参数包 'args'”
您可以在 C++17 中使用 fold expression 来计算对参数包的所有参数使用二元运算符的结果,以解决如下所示的问题。显示的程序使用 一元右折叠 来达到预期的效果。
template<typename... Types>
void print (Types... args)
{
(printMy(args), ...);//uses fold expression in C++17
}
从 C++17 开始,您可以使用
template<typename... Types>
void print (Types... args)
{
(printMy(args), ...);
}
在此之前,你必须使用类似于你所做的技巧:
template<typename... Types>
void print (Types... args)
{
const int dummy[] = {0, (printMy(args), 0)...};
static_cast<void>(dummy); // Avoid warning for unused variable
}