gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:17:17 25 4
gpt4 key购买 nike

我有实现将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com