1

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

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 数组。

先感谢您。

4

2 回答 2

1

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

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

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

于 2012-10-24T21:59:59.487 回答
1

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

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

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

可以在此处找到工作示例。

于 2012-10-24T21:55:58.800 回答