【发布时间】:2022-11-24 00:48:54
【问题描述】:
我正在拼凑一个 C++20 难题。这是我想要做的:函数append_params 将 url 与其他查询参数连接在一起。为了以动态和可扩展的方式进行设计,我想写一个这样的概念
-
它允许可以从中构造 std::string 的类型
-
它允许使用 std::to_string() 将类型转换为字符串
template<typename... Ts> requires requires(T a) { std::to_string(a); } auto append_params(std::pmr::string url, Ts... args) { } -
它适用于一组参数
我在第 2 点找到了有用的信息)here。但是,对于第 1) 点和第 3) 点,我相当无能为力(我也是概念新手)。我如何约束整个参数包(这里的语法是什么?)以及如何确保我可以从每个参数构造一个 std::string 对象?
另外,如果我想使用 std::strings 构造函数或 std::to_string 来处理这种情况,我必须在编译时知道。
【问题讨论】:
-
“它适用于一组参数" 为什么有必要?如果一个概念处理 1 和 2,那么你可以只说
template<concept_name ...Pack>。这个概念本身不需要能够得到一个包。 -
@NicolBolas 对!没想到谢谢!
-
此外,您使用的示例代码使用
pmr::string。to_string不使用pmr::string;它只返回std::string。使用pmr::string的主要原因是因为您想在堆外进行所有必要的内存分配。to_string做不到。那么,您确定要在这里使用to_string吗? -
@NicolBolas 对,没有
std::to_pmr_string()...你是对的,我的选择有点有限。 -
“旧的”“转发到实施”方式:
template <typename... Ts> auto append_params(Url url, Ts... args) -> decltype(((url += to_string(args)), ...)) { return ((url += to_string(args)), ...); }?
标签: c++ c++20 stdstring c++-concepts parameter-pack