Я не хочу объявлять этот шаблон функции, поскольку предполагается, что проект будет использовать ResourceManager с разными типами контейнеров, и я не хочу объявите все возможные контейнеры или включите этот файл в середину моих источников после такого объявления.
Могу ли я как-то избежать этого объявления или инвертировать зависимости, чтобы он работал с контейнерами std а также с моими типами?
В случае, если бы я работал только со своими типами, я бы сделал сериализовать их член класса, но я хочу работать с std< /code> контейнеры, а также без их упаковки.
Код: Выделить всё
#include
#include
#include
// With this forward declaration it works
// template
// void serialize(std::ofstream& ofs, std::vector& v);
template
struct ResourceManager {
Resource& resourse;
ResourceManager(Resource& resourse) : resourse(resourse) {}
void store() {
std::ofstream ofs("vector_bin.vec", std::ios::trunc | std::ios::binary);
serialize(ofs, resourse);
}
};
template
void serialize(std::ofstream& ofs, std::vector& v) {
auto size = v.size();
ofs.write((const char*)&size, sizeof(size));
ofs.write((const char*)v.data(), v.size() * sizeof(int));
}
int main()
{
std::vector v = { 1,2,3 };
ResourceManager rm(v);
rm.store();
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... dependency
Мобильная версия