在我的序列化系统中,我可以提供实现如何序列化给定类型的非成员函数:
// struct foo
struct foo {
int bar;
};
// serialize foo
template <class stream> void serialize(stream& s, foo& f) {
stream.serialize(f.bar);
}
如果对于给定类型不存在非成员函数
serialize
时,我想提供一个空的serialize
实现,如何使用C ++ 11实现呢?我试过了
template <class stream, class type> void serialize(stream&, type&) {}
// struct foo
struct foo {
int bar;
};
// serialize foo
template <class stream> void serialize(stream& s, foo& f) {
stream.serialize(f.bar);
}
// ...later in source file:
foo f;
stream s;
serialize(s, f);
但是它总是以某种方式调用空方法。
最佳答案
添加非成员函数模板。
template <typename stream, typename T> void serialize(stream& s, T& t) {}
这是一个演示程序:
#include <iostream>
template <typename stream, typename type> void serialize(stream&, type&)
{
std::cout << "Came to 1\n";
}
struct stream
{
void serialize(int ) {}
};
// struct foo
struct foo {
int bar;
};
// serialize foo
template <class stream> void serialize(stream& s, foo& f) {
std::cout << "Came to 2\n";
s.serialize(f.bar);
}
struct bar {
};
int main()
{
// ...later in source file:
foo f;
stream s;
serialize(s, f);
bar b;
serialize(s, b);
}
并在cygwin / g ++ 6.4.0下输出:
Came to 2
Came to 1
它也可以在ideone.com下使用。
关于c++ - C++ 11在缺少时提供空的非成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51328177/