gpt4 book ai didi

c++ - 约束参数(位集大小)的模板参数推导失败

转载 作者:行者123 更新时间:2023-12-03 06:50:11 25 4
gpt4 key购买 nike

有没有办法让编译器推导出参数size_t L使用受概念模板参数约束?
这是我得到的最好的

template <typename T, size_t L>
concept def_bitset = std::is_same<T, std::bitset<L>>::value;

template<size_t L>
void stamp(def_bitset<L> auto const &b) {
std::cout << b << std::endl;
}
如果我通过 L 调用它,这会起作用作为模板参数
stamp<4>(bitset<4>{0b0110});
我希望能够在不重复位集大小的情况下调用图章。

最佳答案

存在检查模板参数约束的概念。概念不是类型,尽管在使用简洁符号时出现在与类型相同的位置。它不携带任何可用于模板参数推导的类型信息。
为了说明它,让我们将简洁的函数模板定义重写为其显式形式

template<size_t L, def_bitset<L> T>
void stamp(T const &b) {
std::cout << b << std::endl;
}
这种等效形式应该说明问题。该概念只能检查 T 之后的约束成立。和 L被推导出来。但同时 T很容易推断,这个函数模板定义的编写方式不允许推断 L来自 b .因此您遇到需要指定 L明确地。这个概念没有帮助,因为它不是函数参数的一部分,而是模板本身的一部分。
现在,碰巧问题中的用例根本不需要概念。
template<size_t L>
void stamp(std::bitset<L> const &b) {
std::cout << b << std::endl;
}
这是一个需要 std::bitset 特化的函数模板.

关于c++ - 约束参数(位集大小)的模板参数推导失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64370965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com