template <class ContainerType, class elementType>
void SerializeContainer ( ContainerType<elementType> container)
{
}
//call like this
std::vector<int> vector;
SerializeContainer(vector);
下面不会编译..有什么办法可以通过这个吗?有什么办法可以制作带模板的容器模板?
template <class ContainerType, class elementType>
void SerializeContainer ( ContainerType<elementType> container)
{
}
//call like this
std::vector<int> vector;
SerializeContainer(vector);
下面不会编译..有什么办法可以通过这个吗?有什么办法可以制作带模板的容器模板?
它更容易使用容器value_type
成员提取元素类型:
template <typename T>
void SerializeContainer (const T& container)
{
typedef typename T::value_type ElementType;
..........
}
之所以你的代码不工作是因为语法ContainerType<ElementType>
只有当ContainerType
是一个工作真的是模板。 C++支持模板,模板参数如下:
template <template <typename> class ContainerType, typename ElementType>
void serializeContainer(const ContainerType<ElementType>& container) {
}
但即使是这样,不匹配标准C++容器,因为有一些隐藏的默认参数。当明确写出:
std::vector<int,
std::allocate<int> > vector;
所以你需要做的ContainerType参数接受2个参数:
template <typename <typename, typename> C, typename E, typename A>
void serializeContainer(const C<E, A>& container) {
}
但那么这将不会匹配set::set
,因为它有不同数量的模板参数:
std::set<int,
std::less<int>,
std::allocator<int> > set;
目前根本没有一个尺寸合适的解决办法(前C++ 11)如果你想匹配时的ElementType拼写明确。坚持容器提供的特性会更好。
正是我想要的!谢谢! –
_如何不编译?你可以编辑你的问题,包括错误(请完成未经编辑的请)。 –