- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的代码片段是:
namespace serialization
{
struct output_stream
{
/////
void write(const void* data, size_t size)
{
const byte_t* p = static_cast<const byte_t*>(data);
size_t old_size = buffer_.size();
buffer_.resize(old_size + size);
memcpy(buffer_.data() + old_size, p, size);
}
}
struct input_stream
{
///////
void read(void* to, size_t size)
{
assert(cur_ + size <= end_);
memcpy(to, cur_, size);
cur_ += size;
}
}
}
template <class stream_t>
void serialize(not_pod_struct& r, stream_t stream)
{
if (std::is_same<stream_t, serialization::output_stream>::value)
{
stream.write(&r, sizeof(r));
}
else if (std::is_same<stream_t, serialization::input_stream>::value)
{
not_pod_struct* buf = new not_pod_struct[sizeof(not_pod_struct)];
stream.read(buf, sizeof(not_pod_struct));
r = *buf;
}
else
{
throw std::invalid_argument("stream_t is not a stream.");
}
}
template<class T>
typename enable_if<!is_pod<T>::value, void>::type
read(input_stream & input_stream, T & non_pod_struct)
{
serialize(non_pod_struct, input_stream);
}
template<class T>
typename enable_if<!is_pod<T>::value, void>::type
write(output_stream & output_stream, T & non_pod_struct)
{
serialize(non_pod_struct, output_stream);
}
我有错误:
Error 1 error C2039: 'read' : is not a member of 'serialization::output_stream'
Error 2 error C2039: 'write' : is not a member of 'serialization::input_stream'
这很奇怪。我不明白为什么会发生这些错误。
最佳答案
if
在某些其他语言中不是 static if
。未到达的分支仍然必须编译。
标签分派(dispatch)(如果你正在做比 is_same
更复杂的事情(例如,接受基于 is_input_stream
特征的各种流),这更有用);没有太多意义在使用只接受两种类型并且对每种类型做完全不同的事情的模板时):
template <class stream_t>
void serialize(not_pod_struct& r, stream_t & stream,
std::true_type /* is_input */, std::false_type /* is_output */)
{
not_pod_struct* buf = new not_pod_struct[sizeof(not_pod_struct)];
stream.read(buf, sizeof(not_pod_struct));
r = *buf;
}
template <class stream_t>
void serialize(not_pod_struct& r, stream_t & stream,
std::false_type /* is_input */, std::true_type /* is_output */)
{
stream.write(&r, sizeof(r));
}
template <class stream_t>
void serialize(not_pod_struct& r, stream_t & stream)
{
serialize(r, stream, std::is_same<stream_t, serialization::input_stream>(),
std::is_same<stream_t, serialization::output_stream>());
}
或者只是为 output_stream
和 input_stream
重载 serialize
:
void serialize(not_pod_struct& r, serialization::input_stream & stream)
{
not_pod_struct* buf = new not_pod_struct[sizeof(not_pod_struct)];
stream.read(buf, sizeof(not_pod_struct));
r = *buf;
}
void serialize(not_pod_struct& r, serialization::output_stream & stream)
{
stream.write(&r, sizeof(r));
}
我冒昧地让 serialize
通过引用接受流。另外,我认为您的“阅读”逻辑不正确。你不仅泄漏了用 new
分配的内存,我非常怀疑你打算分配一个 sizeof(not_pod_struct)
的数组 not_pod_struct
关于c++ - 为什么 std::is_same 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638132/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!