从C++20开始可以使用auto
实现积分常量的模板参数:
在线尝试一下! https://godbolt.org/z/3dfq7bbP1
template <auto Value>
struct integral_constant2
: std::integral_constant<decltype(Value), Value> {};
可以使用它来代替更详细的变体std::积分常量 https://en.cppreference.com/w/cpp/types/integral_constant有两个模板参数。
当然更容易写f(std::integral_constant2<123>{});
而不是更冗长f(std::integral_constant<int, 123>{});
。更重要的是,如果您有复杂的编译时表达式,您可能无法提前知道类型。
我的问题是 C++20 std 库中是否存在类似的东西integral_constant2
上面提到的,不是要重新发明轮子吗?或者至少有一些标准constexpr
功能std::make_integral_constant(123)
从而推断出std::integral_constant
的模板参数?
不,我不知道有这样的替代。
我相信,考虑到编写自己的提案是多么容易,捍卫这样的提案是很困难的。另一方面,唯一的原因可能是还没有人提出。
主要是出于好奇,并扩展评论,您可以通过以下方式更进一步:
#include <type_traits>
template <auto Value, template<typename A, A> typename C>
using automized = C< decltype(Value),Value>;
template <auto Value>
using integral_constant = automized<Value,std::integral_constant>;
int main() {
struct S {};
integral_constant<true> c0{};
integral_constant<10> c1{};
integral_constant<S{}> c2{};
}
automized
将允许转发auto
任何模板的参数typename T, T value
。然而,它相当有限,因为它仅适用于完全采用这些参数的模板,而当类型和非类型参数可以混合时,正确处理一般情况是相当痛苦的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)