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

如何在编译期通过std-ranges获取随机访问容器?

问题:consteval环境下适配std::ranges::to的constexpr随机访问容器选择

原始代码

#include <ranges>
#include <algorithm>

auto func(const char* Str) {
    return std::string_view(Str) 
        | std::views::split(',')
        | std::views::transform([](auto inp) { return inp.data(); })
        | std::ranges::to<std::vector<const char *>>();
}

说明:我知道当test = "a,b"时,func(test)的结果是指向test的两个指针,输出会是["a,b", "b"],但我只关心字符串的起始部分。

尝试改为consteval函数后的问题

看到所有std::ranges函数都支持constexpr,因此尝试将该函数改为consteval版本:

template<const char * Str>
consteval auto func() {
    return std::string_view(Str)
        | std::views::split(',')
        | std::views::transform([](auto inp) { return inp.data(); })
        | std::ranges::to<std::vector<const char *>>();
}

编译时出现如下错误:

error: call to consteval function 'func' is not a constant expression
note: pointer to subobject of heap-allocated object is not a constant expression

其中test是static constexpr char[]类型的字符串。我清楚错误来自std::vector的堆内存分配——尽管std::vector本身支持constexpr,但推测std::ranges::to并未将目标容器按constexpr上下文处理。

我还尝试过使用std::ranges::to<std::array>,但同样不被支持。想请教:是否存在其他支持随机访问、兼容constexpr,且可以配合std::ranges::to使用的容器?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:33:28