c++ - 如何专门化容器的功能模板?

标签 c++ templates c++11

我有实现将 POD 存储到流中的函数模板:

template<typename T>
void dumps(std::ostream &os, const T &t)
{
    os.write(reinterpret_cast<const char *>(&t), sizeof(t));
}

有没有办法专门为容器使用这个模板 存储容器大小,然后调用通用实现 容器元素?

最佳答案

这适用于 std::vectorstd::setstd::list。尚未针对任何其他容器进行测试。

它也适用于 POD 类型。使用 int 和以下 struct 进行测试。

struct A
{
   int a;
   double b;
};

// Forward declaration of the wrapper function.
template<typename T>
void dumps(std::ostream &os, const T &t);

// Implementation for POD types
template<typename T>
void dumps(std::ostream &os, const T &t, std::true_type)
{
   os.write(reinterpret_cast<const char *>(&t), sizeof(t));
}

// Implementation for container types
template<typename T>
void dumps(std::ostream &os, const T &t, std::false_type)
{
   auto size = std::distance(t.begin(), t.end());
   os.write(reinterpret_cast<const char *>(&size), sizeof(size));
   for ( auto const& item : t)
   {
      dumps(os, item);
   }
}

// Implementation of the wrapper function.
template<typename T>
void dumps(std::ostream &os, const T &t)
{
   dumps(os, t, std::integral_constant<bool, std::is_pod<T>::value>());
}

关于c++ - 如何专门化容器的功能模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29454109/

相关文章:

c++ - 替换 vector vector C++ 中的元素

c++ - SFINAE 检查失败

C++ primer 加 Chapter14 无类型堆栈

c++ - 为什么在全局变量的析构函数中调用 thread.join 会失败

c++ - shared_ptr 不会在程序结束时破坏对象

c++ - 从二进制文件中读取6字节8位整数

c++ - 简单的智能感知解决方案

c++ - 具有多态性的模板特化

c++ - 在 C++ 中将非常量引用传递给右值

c++ - 生产者消费者 pthreads 程序未完成