1

後でマップに追加するために、次の2行のコードを実行しています。

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

それらを追加するには、次のように定義された2つの追加関数を使用しています。

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

最初のものは正常に動作し、必要な値を返しますが、2番目のものを追加すると、エラーが発生します。

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

私の質問は、なぜ最初の文字列が適切に使用されているのか、そして2番目の文字列がconstchar配列として考えられているのかということです。

前もって感謝します。

4

2 に答える 2

1

2番目のオーバーロードではテンプレート引数を使用していないため、次の引数を削除します。

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 に答える
1

エラーメッセージは奇妙ですが、2番目のオーバーロードを使用するには、テンプレート引数を明示的に指定する必要があります(自動的に推測する方法がないため)。

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

または、この場合に実際にテンプレートパラメータが必要ない場合は、非テンプレートメソッドにするだけです。

于 2012-10-24T21:59:59.487 に答える