我有一个类模板:
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);
}
这允许我只提供N
和T
推断。是否有我忽略的 c++20(及更高版本)功能,可以让我省去这个功能?我试过这个:
template <std::size_t N, typename T>
iterator(T*) -> iterator<T, N>;
但是,它不起作用,因为:
仅当不存在模板参数列表时才执行类模板参数推导。如果指定了模板参数列表,则不会进行推导。