相关疑难解决方法(0)

演绎指南和注入的班级名称

template <typename T>
struct X
{
    template <typename Iter>
    X(Iter a, Iter b) {}

    template <typename Iter>
    auto f(Iter a, Iter b)
    {
        return X(a, b);
    }
};
Run Code Online (Sandbox Code Playgroud)

"C++模板,完整指南"第2版​​中,有前面的示例关于带有注入类名的隐式演绎指南的字幕.作者提到,对于注入的类名禁用了类参数推导,因为f的返回类型将X<Iter>归因于隐式推导指南.但我相信模板构造函数的隐式演绎指南更像是下面的那个.

  template <typename T, typename Iter>
  X(Iter a, Iter b) -> X<T>;
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将类模板参数类型,即使在这种情况下,可以推断T,并Iter有两种不同类型和参数类型的唯一依靠Iter.即使T可以某种方式推断出来,T并且Iter是独立的,所以Iter从论证中推断出来并不意味着它的X类型是X<Iter>正确的吗?这是书中的文字有些错误,还是演绎指南看起来与我的想法不同?

c++ type-deduction c++17

8
推荐指数
1
解决办法
198
查看次数

标签 统计

c++ ×1

c++17 ×1

type-deduction ×1