gpt4 book ai didi

c++ - 如何帮助模板类型推断

转载 作者:行者123 更新时间:2023-11-28 06:34:40 26 4
gpt4 key购买 nike

我有一个抽象基类:

template<class T>
class Iterator
{
public:
virtual T operator*() = 0;
...
};

我有一个具体的子类

template<class T,
template<class, class> class Col,
class Alloc = std::allocator<T>>
class StdIterator final: virtual public Iterator<T>
{
typedef typename Col<T, Alloc>::iterator std_iterator;
std_iterator b, e;
public:
StdIterator(Col<T, Alloc>);
StdIterator(std_iterator, std_iterator);
T operator*() const override;
...
};

在调用点,我有类似 StdIterator<int, std::vector> x (a_std_vector) 的代码.我怎样才能将调用站点更改为简单的 StdIterator<std::vector<int>>> x (a_std_vector) , 并让它绑定(bind) T基于 std::vector 的模板参数?我仍然需要将 T、Col 和 Alloc 全部绑定(bind)在类的体内。

除此之外,我拥有的代码仅适用于 std::vectors,不适用于 std::sets 等。我试图获得该功能(使用可变参数类模板),但我什至无法获得它进行编译。

最佳答案

标准容器有 value_type typedef,所以你可以使用类似的东西:

template<class C>
class StdIterator final: virtual public Iterator<typename C::value_type>
{
typedef typename C::iterator std_iterator;
// your stuff
};

关于c++ - 如何帮助模板类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com