我不确定我是否在模板化方面走得太远,但是存在以下问题:
我有一个容器类。这个类可以直接取值,也可以取值取值的矢量。我想专门针对第二种情况。
我怎么能......
代码示例:
// GENERAL CASE with vector of type T
template <class T>
class Container
{
std::vector<T> container;
void set(T val, int idx){
this->container[idx] = val;
}
};
// SPECIAL CASE with vector of vectors
template <>
class Container<std::vector<all types allowed>>
{
std::vector<The_type_of_vector> container;
void set(The_type_of_vector val, int idx1, int idx2){
this->container[idx1][idx2] = val; // set element idx2 in vector idx1
}
};
(当然我的容器比这里显示的要复杂一点。我也可以创建容器的两个不同的非模板版本。但在考虑之后,我也很好奇我如何通过专业化来实现它。 )
答案 0 :(得分:4)
你几乎就在那里,你只需要语法。
// SPECIAL CASE with vector of vectors
template < typename element_type >
class Container<std::vector< element_type >>
如果您确实想支持不同的分配器,也可以从vector
中提取分配器类型。
我不确定我是否在模板化方面走得太远
如果您可以选择是否编写模板,通常不应该。否则,这里没有任何可疑之处。