3

我有一个类模板:

template <typename T, std::size_t N>
class iterator
{
  explicit iterator(T*);
};

我尝试使用 c++17 功能Class template argument deduction (CTAD)进行推断T,但我不能这样做,因为无法推断N和指定N意味着无论如何都不会尝试 CTAD。所以我采用了老式的方式:

template <std::size_t N, typename T>
auto make_iterator(T* const p)
{
  return iterator<T, N>(p);
}

这允许我只提供NT推断。是否有我忽略的 c++20(及更高版本)功能,可以让我省去这个功能?我试过这个:

template <std::size_t N, typename T>
iterator(T*) -> iterator<T, N>;

但是,它不起作用,因为:

仅当不存在模板参数列表时才执行类模板参数推导。如果指定了模板参数列表,则不会进行推导。

4

0 回答 0