我创建了一个 C++11 类,我想在其中解析一个字符串并根据字符串中的数据返回一个对象。我要返回的对象定义为:
// Container for the topic data and id
template <typename T>
class Topic
{
public:
Topic(string id, T data)
: _id(id), _data(data)
{}
private:
string _id;
T _data;
};
返回对象的函数定义为:
// 解析字符串并将其拆分为组件
class TopicParser
{
public:
template <class T>
static Topic<T>
parse(string message)
{
T data; // string, vector<string> or map<string, string>
string id = "123";
Topic<T> t(id, data);
return t;
}
};
我(想我)希望能够以这种方式调用该函数:
string message = "some message to parse...";
auto a = TopicParser::parse<Topic<vector<string>>>(message);
auto b = TopicParser::parse<Topic<string>>(message);
但编译器抱怨说:
no matching function for call to ‘Topic<std::vector<std::basic_string<char> > >::Topic()’
如您所知,我不是模板专家。我正在尝试做一种使用模板的批准方式,我应该更喜欢其他方法吗?