【发布时间】:2021-01-19 08:56:31
【问题描述】:
我想检查给定变量是否为字符。现在,我的函数根据向量的元素返回一个字符串。
问题是如果我给它一个 char 向量,那么 to_string() 会给我字符 'foo' 的数值。所以我希望它在哪里阅读:
a b
它改为读取
97 98
我宁愿在函数中实现一些东西而不是创建重载,因为我已经为参数类型 vector<vector<T>> 和 vector<array<T, 2>> 提供了另外两个重载,它们需要按相同的逻辑运行,总共有六个会很混乱功能而不是三个。
/** to string for vector that has singular elements
* vtos : vector to string
**/
template <class T>
basic_string<char> vtos (vector<T> &v )
{
string ret;
int i = 0;
for ( T& foo: v )
{
ret.append(to_string(foo) + " ");
if (++i % 10 ==0)
ret.push_back('\n');
}
return ret;
}
++++++++++++++++++++++++++++++++++++++
编辑: 如果您有 C++17,则可以使用标记的解决方案。我没有,所以我决定只使用默认参数。
编辑 2:标记的答案现在还包括一个编辑,在那里检查 c++17 之前的答案。我自己的也会留在这里。
template <class T>
basic_string<char> vtos (vector<T> &v, bool isChar=false)
{
string ret;
int i = 0;
for ( T& foo: v )
{
if (isChar)
ret.push_back(foo);
else
ret.append(to_string(foo));
ret.push_back(' ');
if (++i % 10 ==0)
ret.push_back('\n');
}
return ret;
}
【问题讨论】:
-
basic_string<char>只是stringBTW。 -
if constexpr (std::is_same_v<T, char>) ...?或者添加my_to_string并为char重载。 -
我没有安装 C++17,无法使用该解决方案。而是决定简单地添加一个默认的布尔参数 isChar,因为我只需要知道一个特定的情况。谢谢大家的回答
-
我已更新我的帖子以包含 c++14 解决方案。如果将
is_same_v<>替换为is_same<>::value,它也可以在c++11 中使用
标签: c++ templates char append tostring