相关疑难解决方法(0)

在可变参数模板函数中连接字符串(和数字)

我正在尝试编写一个函数,它接受各种字符串或数字(与std::to_string它们一起使用并连接它们.我只使用它来处理字符串,但是我在根据输入作为字符串或数字进行特殊处理时遇到了麻烦.

我的代码被调用如下:

stringer("hello", "world", 2, 15, 0.2014, "goodbye", "world")

这就是我所拥有的:

inline std::string stringer(const std::string &string)
{
    return string;
}

template <typename T, typename... Args>
inline std::string stringer(const std::string &string, T &&val, Args &&...args)
{  
    return stringer(string+std::to_string(val), std::forward<Args>(args)...);
}

template <typename... Args>
inline std::string stringer(const std::string &string, Args &&...args)
{
    return stringer(string, std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)

目前它正在打破任何多个字符串添加,除非以下是所有数字(由于to_string).如何根据字符串或数字进行专门化以完成上述工作?谢谢.

c++ variadic-functions variadic-templates c++11

13
推荐指数
4
解决办法
7497
查看次数

int a[] { (functioncall(a1, a2), 0)...}; (无效(a)); 这个语法是什么/意味着什么?

我遇到了这个 post可变参数模板函数来连接 std::vector 容器,建议使用以下语法:

template<typename T>
void append_to_vector(std::vector<T>& v1, const std::vector<T>& v2) {
  std::cout << v2[0] << std::endl;
  for (auto& e : v2) v1.push_back(e);
}


template<typename T, typename... A>
std::vector<T> concat_version3(std::vector<T> v1, const A&... vr) {
    int unpack[] { (append_to_vector(v1, vr), 1)... };
    (void(unpack));
    return v1;
}
Run Code Online (Sandbox Code Playgroud)

我开始玩弄它以了解它是如何工作的,因为我还没有看到这个:

int unpack[] { (append_to_vector(v1, vr), 0)... };
(void(unpack));
Run Code Online (Sandbox Code Playgroud)

似乎这是某种动态生成的初始化列表,它也有副作用?我也对0上述无关紧要的事实感到困惑。我替换了 -1 和 5,这些值中的每一个也都工作得很好。

那么有人可以告诉我这种技术/语法的名称以及上面两行中究竟发生了什么?如果我错过了相关的 SO 帖子,我将非常感谢任何指点并道歉。

c++ templates variadic-templates c++11 list-initialization

2
推荐指数
1
解决办法
326
查看次数