繁体   English   中英

什么是通过后退到任何插入器来获得向后插入器的惯用方法?

[英]What's the idiomatic way to get a backwards inserter with a fallback to any inserter?

我想将元素插入到STL容器中(其类型是模板参数)。 如果容器允许back_insertion,我想使用它,否则只是任何插入器。

我想避免为此实现我自己的特性,我很确定必须有一些我可以说“如果可能的话,实例化一个back_inserter,否则就是一个插件”。

我怎么做?

您可以使用具有重载决策的尾随返回类型来执行以下操作:

namespace impl
{
   // preferred overload: if we can push_back a Container::value_type
   template <class Container>
   auto generic_inserter(Container& c, int)
       -> decltype(void(c.push_back(std::declval<typename Container::value_type>())),
                   std::back_inserter(c))
    {
        return std::back_inserter(c);
    }

    // fallback if we can't
    template <Container>
    auto generic_inserter(Container& c, ...)
    {
        return std::inserter(c, c.end());
    }
}

template <class Container>
auto generic_inserter(Container& c)
{
    return impl::generic_inserter(c, 0);
}

使用C ++ 11,只需用decltype(body-of-function)替换auto返回类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM