我环顾网络以了解这些高度简单易用的表达式是如何在幕后实现的,但我找不到与这些表达式的实现相关的任何内容。
例如:
template<typename ...Types>
struct my_struct {
static_assert((std::is_integral<Types>::value && ...), "All types must be integrals");
};
或者:
template <typename T>
auto func1(const T param) {
return paramm * (param + 1);
}
template <typename ...Types>
auto func2(const Types... params){
return (func1(params) + ...);
}
我只在 C++11 和 C++14 中找到了递归方式,但我找不到任何关于编译器理解这些表达式的智能方式。
我将尝试更好地解释我的问题:
在将折叠表达式编译为汇编之前,编译器是否将折叠表达式转换为更简单的 C++ 代码(如果是,它是递归发生还是在常规循环中发生)?
询问将可变参数表达式编译成汇编的一般方法可能会更好,但在 C++11/C++14 中,它比 C++17 中的折叠表达式更接近 C 语法。用低级语言实现它看起来并不简单。
要更多地关注这个问题——如果可能的话,并且您知道具有此功能(折叠表达式)的开源编译器,请将您的答案参考这个编译器(尽管如果存在,我会寻找更一般的答案)。