私は一種のシリアル化クラスを書いています。コンテナの機能を提供する必要があります。現在の実装は次のとおりです。
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
はstd::pair(const K, V)
ないためですstd::pair(K, V)
。
そこで、適切なまたはread(InsertIter)
を自動的に選択するメソッドを作成したいと思います。これは可能ですか?readContainer(InsertIter)
readMap(InsertIter)