我正在解释实验性Boost :: DI依赖注入框架的实现:
http://boost-experimental.github.io/di/cppnow-2016/#/7/22
在那里提供以下代码:
template <typename T, std::size_t... Ns>
constexpr auto getCnstrSize (std::index_sequence<Ns...>) noexcept {
auto value = 0;
int _[]{(is_constructible<T, std::make_index_sequence<Ns>>{}? value = Ns
: value)...};
return value;
}
我对Lambda特别感兴趣。我理解它的功能,它通过index_sequence
,并且如果类型T
具有带有该数量的参数的构造函数,则设置值。
令我难过的是下划线。我摆弄了,我不能把它带走。我也不能插入像_=[]
这样的相等,所以它不是变量名。我的问题是,它做了什么?
答案 0 :(得分:4)
下划线只是该词汇块中的变量名。它是使用pack expansion填充的initializer_list
构建的。它不是lambda,由于使用{}
的初始化列表,它看起来很混乱。