该语法是 C++17 中的折叠表达式 (fold expression) 语法,用于展开参数包并在表达式中使用。在 C++11 中没有这个语法,所以无法直接将其转换为 C++11。

但是,您可以使用 C++11 中的递归展开参数包的方式来实现类似的效果。下面是一个可能的实现:

template <typename T, typename... Args>
void set_values(T& j, const Args&... args) {
    using expander = int[];
    (void)expander{0, ((void)(j[std::get<Args>(args)] = args), 0)...};
}

在上面的代码中,我们通过使用递归展开参数包的方式,手动展开参数包并在表达式中使用。这样就可以达到类似的效果,实现了在 C++11 中使用类似的功能。

请注意,上面的代码假设参数包中的所有参数都是合法的,并且正确地匹配到 std::get 的返回类型。

C++17 折叠表达式 (fold expression) 语法在 C++11 中的实现

原文地址: https://www.cveoy.top/t/topic/pdPx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录