#include <string>
#include <string_view>
template<typename... Args>
std::string_view concatenateBuffer(std::string &buffer, Args &&... args){
static_assert((std::is_constructible_v<std::string_view, Args> && ...));
buffer.clear();
(buffer.append(std::forward<Args>(args)), ...);
return buffer;
}
template<typename ...Ts>
std::string_view concat(std::string s, Ts ...ts){
return concatenateBuffer(s , (("," , ts) , ...) );
}
#include <iostream>
int main(){
std::string b;
std::cout << concat(b, "a") << '\n';
std::cout << concat(b, "a", "b") << '\n';
}
我有函数concatenateBuffer
,我在这里展示的版本是简化的,但它的作用是将“字符串”(char *,string_view,string)附加到buffer
。
我想做另一个concat
类似于 php 函数 implode 的函数,例如在“字符串”之间放置分隔符“,”。
例如如果你调用:
concat(b, "a") ===> "a"
concat(b, "a", "b") ===> "a,b"
concat(b, "a", "b", "c") ===> "a,b,c"
可以使用折叠参数包来完成吗?