代码检测字符串和const char数组

时间:2012-10-24 21:51:22

标签: c++ string templates

我正在运行这两行代码,以便稍后添加到地图中:

o.add("-i", 800,             "int option");  
o.add("-w", "'switch on' option (no third parameter)");

要添加它们,我正在使用我的两个添加函数定义为:

template<class T>
void add(std::string name, T value, std::string desc);
template<class T>
void add(std::string name, std::string desc);

第一个工作正常,并返回我想要的值,但如果我添加第二个,我得到错误:

error: no matching function for call to ‘Opt::add(const char [3], const char [40])’

我的问题是为什么它正确地在第一个中使用我的字符串,而第二个中的字符串被认为是const char数组。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

由于您未在第二次重载中使用模板参数,请将其删除:

template<class T>
void add(std::string name, T value, std::string desc);

void add(std::string name, std::string desc);

可以找到工作样本here

答案 1 :(得分:1)

错误消息很奇怪,但要使用第二个重载,您需要显式指定模板参数(因为无法自动推导它):

o.add<T>("-w", "'switch on' option (no third parameter)"); 

或者,如果在这种情况下实际上不需要模板参数,只需将其设为非模板方法。