我在这里看https://github.com/abseil/abseil-cpp/blob/master/absl/types/span.h#L673
template <int&... ExplicitArgumentBarrier, typename T>
constexpr Span<T> MakeSpan(T* ptr, size_t size) noexcept {
return Span<T>(ptr, size);
}
Run Code Online (Sandbox Code Playgroud)
我不明白这个功能.在int&... ExplicitArgumentBarrier做什么?它没有在函数中使用,所以我无法弄清楚它被使用的原因.
举例来说明这是什么'技巧'以及为什么使用它将非常感激.
Hen*_*nke 11
您在错误代码中找到的常见模式是在函数模板中使用显式模板参数,否则将执行模板参数推导,例如
std::make_pair<int,std::string>(1729, "Hello World!");
Run Code Online (Sandbox Code Playgroud)
这是多余的,在这种情况下,第二个参数的显式类型甚至不同于推断的类型.
为了防止人们这样做,你可以在可推断出的参数前放置一个可变参数模板参数,这样就没有人可以明确地命名这些参数.
开发人员显然选择int&...了伪造论证的类型,但它可能是任何其他东西(另一种类型),并且为了提高代码的可读性,他们也给了它一个名字,ExplicitArgumentBarrier现在应该有意义.