我正在编写一种序列化类。它必须为容器提供功能。目前的实现是:
template <typename InsertIter>
bool readContainer(InsertIter result)
{
typedef typename InsertIter::container_type::value_type tVal;
UInt32 size = 0;
if (!read(size))
return false;
for (UInt32 i = 0; i < size; ++i)
{
tVal val;
if (!read(val))
return false;
*result++ = val;
}
return true;
}
template <typename InsertIter>
bool readMap(InsertIter result)
{
typedef typename InsertIter::container_type::key_type tKey;
typedef typename InsertIter::container_type::mapped_type tVal;
UInt32 size = 0;
if (!read(size))
return false;
for (UInt32 i = 0; i < size; ++i)
{
std::pair<tKey, tVal> pair;
if (!read(pair))
return false;
*result++ = pair;
}
return true;
}
如您所见,我必须为类似地图的类型 ( std::map
) 和其他容器创建不同的实现,因为std::map::value_type
isstd::pair(const K, V)
和 not std::pair(K, V)
。
所以,我想创建read(InsertIter)
一个自动选择适当的方法readContainer(InsertIter)
or readMap(InsertIter)
。这可能吗?