模板函数接受const char *和const std :: string& PARAMS

时间:2018-05-05 10:58:35

标签: c++

我正在研究的项目本质上是多个c和c ++ api项目的包装器,它们的服务目的相同。项目本身也有c和c ++ api。因此,当我需要处理char *和std :: string类型字符串时,代码中有很多地方。 所以问题是如何方便有效地创建模板函数,它接受(const)char *和(const)std :: string&类型参数?

例如我想检查两种类型的字符串是否为空,当然我想添加const限定符,以便明确我不会改变参数。

我到目前为止的最佳解决方案是:

-(void)setNavigationItems{
     UIBarButtonItem *leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"**Your title here**" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonClicked)];   
     self.navigationController.navigationBar.topItem.backBarButtonItem=leftBarButtonItem;
}
-(void)backButtonClicked{
    [self.navigationController popViewControllerAnimated:YES];
}

但是我可以强制传递std :: string而不使用const限定符来实现此功能。我清楚地知道,对于这种情况,我只是可以重载功能,根本不使用模板。但它有点不是很好的解决方案,特别是当功能参数数量增加时。

例如我也想写模板函数:

template<typename T>
bool is_str_empty(T&);

template<>
bool is_str_empty(const char*& c)
{
  return !c || strlen(c) == 0;
}

template<>
bool is_str_empty(std::string& s)
{
  return s.empty();
}

其中T可以是const char *和const std :: string&amp; (来源)和K. char *或std :: string&amp; (DEST)。因此,如果我只使用重载执行此操作,则会在标头中使用四个函数声明而不是一个模板函数。

0 个答案:

没有答案