4
コードを考えてみましょう:テンプレートパラメータを明示的に指定してテンプレートキャスト演算子を呼び出すことはできますか?
#include <string>
#include <sstream>
template <class T>
struct converter_impl {
std::string to_convert;
operator T() {
T result;
std::stringstream ss(to_convert);
ss >> result;
return result;
}
};
struct converter {
std::string to_convert;
template <class T, class CI = converter_impl<T>>
operator T() {
CI ci = CI{std::move(to_convert)};
return ci;
}
};
converter from_string(std::string s) {
return converter{std::move(s)};
}
今、私は、例えばすることができます次のようにfrom_string
機能を使用します。
string s = "123";
int x = from_string(s);
cout << x << endl;
私はちょうど好奇心converter
が明示的にテンプレートパラメータを指定する構造体のキャスト演算子を呼び出す方法がある場合。構文:
from_string(s).operator int<int, converter_impl<int>>();
が...動作しません
とても興味深いものでしたが2番目のテンプレートパラメータを渡す方法はありませんか...? –
回避策として、 'struct converter'にテンプレート関数' cast'を追加することができます。そして、暗黙のキャストが可能なときに 'operator T'が呼び出されます。明示的にキャストが必要なときは、あなたの関数を呼び出すことができます。 – user2807083
素晴らしいアイデア!ありがとう! –