You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中能否实现"部分递归"的函数约束?

关于C++ TrivialSerializer策略类的递归约束匹配问题

我正在编写策略类TrivialSerializer,用于嵌入后续C++函数中。该策略需序列化由其他策略指定类型的对象并写入流,仅需序列化对象值——因为对象的布局与结构已预先定义。

为实现该功能,我使用泛型模板静态成员函数:

template <typename T> static void write(output_stream_t& stream, T const& object);

仅保留部分特化与重载版本为非删除状态。例如,为sized range编写的泛型特化如下:

template <ranges::sized_range T>
requires requires(output_stream_t& stream, ranges::range_value_t<T> value) {
    { write<ranges::range_value_t<T>>(stream, value) };
}
static void write(output_stream_t& stream, T const& range);

同时我还为元组、整数类型编写了类似特化,并为特定类提供单独重载。

问题在于语言的约束解析方式与预期不符:vector<vector<int>>无法匹配sized range特化,因requires子句评估时,其值类型vector<int>的特化尚未实例化,但单独使用vector<int>时可正确匹配重载。

我期望调用write(output_stream_t&, vector<vector<int>> const&)时,类型检查器能递归匹配重载:先匹配sized range特化,再尝试调用write(output_stream_t&, vector<int> const&),进而再次匹配sized range特化,最终找到int对应的整数特化,判定vector<vector<int>>可作为参数。

核心问题

能否让C++约束检查器执行这种递归重载匹配,还是必须在write函数体内用运行时约束检查?

次要问题

C++标准委员会或工作组是否有相关提案解决该问题?

我已查看过相关问题,但未找到适用方案。


内容的提问来源于stack exchange,提问作者AdamantConlanger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:16:09