Jul*_*ues 6 c++ c++-concepts c++20
有没有办法让编译器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;
}
Run Code Online (Sandbox Code Playgroud)
如果我调用它L作为模板参数传递,这会起作用
stamp<4>(bitset<4>{0b0110});
Run Code Online (Sandbox Code Playgroud)
我希望能够在不重复位集大小的情况下调用图章。
存在检查模板参数约束的概念。概念不是类型,尽管在使用简洁符号时出现在与类型相同的位置。它不携带任何可用于模板参数推导的类型信息。
为了说明它,让我们将简洁的函数模板定义重写为其显式形式
template<size_t L, def_bitset<L> T>
void stamp(T const &b) {
std::cout << b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这种等效形式应该说明问题。这个概念只能检查约束持有后 T和L已经推出。但是虽然T很容易推断,但此函数模板定义的编写方式不允许L从b. 因此,您遇到了L明确指定的需要。这个概念没有帮助,因为它不是函数参数的一部分,而是模板本身的一部分。
现在,碰巧问题中的用例根本不需要概念。
template<size_t L>
void stamp(std::bitset<L> const &b) {
std::cout << b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这是一个函数模板,期望std::bitset.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |