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拼寫明確。堅持容器提供的特性會更好。
正是我想要的!謝謝! –
_如何不編譯?你可以編輯你的問題,包括錯誤(請完成未經編輯的請)。 –