gpt4 book ai didi

c++ - 简单参数包扩展 : expected ';'

转载 作者:行者123 更新时间:2023-11-30 01:52:53 31 4
gpt4 key购买 nike

在下面的片段中:

void normalize(path& p)
{
// do something with p
}

template<typename... T>
void normalize(T&... t)
{
normalize(t)...; // (L)
}

在我的实际理解中,(L) 行扩展为:

template<typename... T>
void normalize(T&... t) // T = {t1, t2, t3}, for example
{
normalize(t1), normalize(t2), normalize(t3);
}

并且这些表达式中的每一个都将执行单参数版本的normalize。但是,g++ (4.8.1) 抛出以下错误:

prueba.cpp: In function 'void normalize(T& ...)':
prueba.cpp:155:17: error: expected ';' before '...' token
normalize(t)...;
^
prueba.cpp:155:20: error: parameter packs not expanded with '...':
normalize(t)...;
^
prueba.cpp:155:20: note: 't'

我的代码有什么问题?

最佳答案

在此上下文中不允许扩展参数包。如果您创建一个辅助类 pass,您可以执行以下操作:

pass{(normalize(std::forward<T>(t)), 0)...};

辅助类 pass 可能如下所示:

struct pass
{
template <typename ...Args>
explicit pass(Args&&...) { }
};

关于c++ - 简单参数包扩展 : expected ';' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23859649/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com