通用引用和接口之间的关系

时间:2015-11-24 13:07:10

标签: c++11

我正在阅读scott meyers关于有效现代C ++的书,其中第27项是tex

  

在使用通用参考参数时,在复杂系统中通用   引用之前转发了几层函数调用   最后到达一个确定是否存在争论的网站   类型是可以接受的。通用引用的次数越多   转发,mor错误消息可能是什么时候   出错。许多开发人员发现仅此问题就是理由   保留接口的通用参考参数   表现是最重要的。

链接的一些背景

https://books.google.co.in/books?id=rjhIBQAAQBAJ&pg=PA195&lpg=PA195&dq=universal+reference+parameters+vs+interfaces&source=bl&ots=Fl0OZ6zCsR&sig=1qtsPv44aUl91B8SNcSYWswqSD0&hl=en&sa=X&ved=0ahUKEwjpgOj2janJAhWK8CYKHY2DDd0Q6AEILjAC#v=onepage&q=universal%20reference%20parameters%20vs%20interfaces&f=false

我正在关注上述问题

  1. 作者的意思是“保留接口的通用参考参数”?

  2. C ++中的通用引用和接口之间是否存在任何关系

2 个答案:

答案 0 :(得分:2)

您似乎将普通英语解释为技术术语。有问题的句子是:

  

许多开发人员发现仅此问题就是为性能最受关注的接口保留通用参考参数的理由。

“通用引用”(现在称为“转发引用”)是一个技术术语,但其他单词用于其正常程序员的英文含义。这句话可以用这样简单的词语重新措辞:

  

许多开发人员发现,由于这个问题,如果函数的性能至关重要,他们只在函数的参数中使用通用引用。

回答您的确切问题:

  1. 由于潜在的神秘错误消息,开发人员决定仅对某些接口使用通用引用。换句话说,他们为这些接口保留

  2. “接口”一词用作“您访问某些内容的点”。功能,类或类似的东西。它不是interface作为面向对象意义上的技术术语。 C ++甚至没有这种“interface”的概念。

答案 1 :(得分:1)

  1. AFAIU,他的意思是“避免过度使用通用引用,主要在(公共)API或大型架构组件之间的接口中使用它们。”
  2. 一方面,使用通用引用是有效的(尽可能移动对象,否则复制),另一方面,让您摆脱多个重载方法。出于这些原因,通用引用在API设计中很有用。
  3. 在设计既不接口也不是 API的类时,作为程序员,您可以选择使用通用引用

    template <typename T>
    void Foo(T&&);
    

    和重载

    void Foo(Foo&&);
    void Foo(const Foo&)
    void Foo(Bar&&);
    void Foo(const Bar&);
    // overloads with volatile are less commonly used, but possible
    

    第一个选项更简洁。第二个在编译错误的情况下产生更清晰的消息。

    您也可以选择不进行某些重载。但这可能不太有效(在性能方面)解决方案。