头文件中的内联 lambda



这与我见过的其他问题类似,但考虑到 C++17 引入了内联变量,值得一问。 请考虑以下模式:

auto to_ref = [](auto const& ptr) -> decltype(auto) { return *ptr; }
std::vector<std::unique_ptr<Foo>> foo_ptrs = from_somewhere();
for (Foo const& foo : foo_ptrs | transform(to_ref)) {
}

通用 lambdato_ref是...嗯,通用...因此,将其放在标题中是有意义的,这样人们就不会到处复制它。

我的问题:模板的链接注意事项是否也适用于通用 lambda? 换句话说,编译器/链接器有责任确保在具有相同模板参数的给定模板的多个实例化时不会违反 ODR。 我可以依赖相同的行为,还是应该将inline说明符附加到auto to_ref = ...;规范?

to_ref是一个带有模板operator()的对象,它不是任何类型的模板。

您需要标记它inline遵守 ODR。

相关内容

  • 没有找到相关文章

最新更新