gpt4 book ai didi

c++ - Getline 从字符串流到模板变量

转载 作者:行者123 更新时间:2023-11-28 06:17:41 24 4
gpt4 key购买 nike

我有一个类似std::map的类,我从一个文本文件中读取变量和值,这段代码解析每一行,str是一行从文本文件中,它看起来像这样 VAR_NAME=valueout 是值应该去的地方,它是一个模板变量。

[...]
std::stringstream ss;
ss<<str.substr(str.find("=")+1, str.length()-1);
T out;
ss>>out;
cmap[str.substr(0, str.find("="))] = out;
[...]

现在,使用这段代码一切正常,但是当我将 T 设置为 std::string 时,如果我有这样一行 VAR_NAME=value spaced,最后我只得到 valuespaced 在我使用 >>> 运算符时被截断,我想知道如何通过让代码尽可能干净来使其工作,我找到了 getline,但它似乎不适合我......

最佳答案

您可以使用辅助类及其特化。

template <typename T> struct ValueExtractor
{
static T get(std::string const& s)
{
T out;
std::stringstream ss(s);
ss >> out;
return out;
}
};

现在是 std::string 的特化。

template <> struct ValueExtractor<std::string>
{
static std::string get(std::string const& s)
{
return s;
}
};

并将您的实现更改为:

T out = ValueExtractor<T>::get(str.substr(str.find("=")+1));

关于c++ - Getline 从字符串流到模板变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com