私はテンプレートの引数によって型が決まるメンバ変数を持つ次のクラステンプレートを持っています。コンストラクタでこのメンバの値を初期化したいだけです。コンストラクタの値はstd::string
です。したがって、私の問題は、std::string
をいくつかのタイプ(int
、double
、bool
、string
)に変換する必要があるということです。私はコンストラクタだけを専門にすることはできないと思っています。クラスごとにクラスごとに特化しない方がいいでしょう。std :: stringをコンストラクタのいくつかの型に変換するには?
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template <typename Ty>
struct Test
{
Ty value;
Test(string str) {
stringstream ss;
ss.str(str);
ss >> value;
}
};
int main()
{
Test<int> t1{"42"};
Test<double> t2{"3.14159"};
Test<string> t3{"Hello world"};
cout << t1.value << endl << t2.value << endl << t3.value << endl;
return 0;
}
上記のコードの出力は次のとおりです:
代わりに「Hello World」の42
3.14159
Hello
以下の私のコードの問題は、それがスペースを打つときstringstream
停止が出ストリーミングということです。 stringstream
を空白や他のデバイスで停止しないようにする方法はありますか?
[Boost.Lexical_Cast](http://www.boost.org/doc/libs/1_61_0/doc/html/boost_lexical_cast.html)をご覧になることをお勧めします。 –