0
我有一個抽象基類:如何幫助模板類型推斷
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)
,並根據std::vector
的模板參數將其綁定爲T
?我仍然需要T,Col和Alloc都被束縛在課堂的內部。
除此之外,我的代碼將只適用於std :: vectors,而不是std :: sets等。我嘗試過使用variadic類模板來獲得該功能,但我甚至不能讓它編譯。