无法使用泛型向量作为参数创建精确的函数模板

时间:2015-12-22 10:07:48

标签: templates c++11

我有一个序列化任何类型参数的函数。它适用于所有类型,除非我传递任何类型的矢量。 我创建了以下模板:

template <typename T>
inline bool serialize(const std::vector<T>& v){}

但它不起作用,它会抛出以下运行时符号错误,该错误会查找以下模板专门化:

bool serialize<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<char>, rapidjson::CrtAllocator>, rapidjson::UTF8<char>, rapidjson::UTF8<char>, rapidjson::CrtAllocator>&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)

简化模板的确是:

bool serialize<std::vector<std::string> >(rapidjson::Writer<>&, std::vector<std::string> const&)

有人可以帮我创建上述错误所需的确切功能模板吗?

1 个答案:

答案 0 :(得分:1)

答案是:

template <template <typename Value, typename Allocator  = std::allocator<Value>> class Container> class VectorWrapper;
template<typename T = decltype(VectorWrapper)>
inline bool serialize(writer_t& w, const T& v)
{ //code here }