从函数返回不同的模板特化

时间:2013-05-19 04:55:33

标签: templates c++11

我创建了一个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()’

正如您所知,我不是模板专家。我正在尝试使用模板的批准方式我应该更喜欢其他方法吗?

1 个答案:

答案 0 :(得分:4)

我猜这里使用Topic<vector<string>>作为模板参数是没用的。只需删除Topic

即可
auto a = TopicParser::parse<vector<string>>(message);
auto b = TopicParser::parse<string>(message);