gpt4 book ai didi

c++ - 自动扣除部分模板类型

转载 作者:行者123 更新时间:2023-11-28 02:01:29 25 4
gpt4 key购买 nike

我想编写简单的模板函数,它返回给定数字的 n lsb 位,其中 n 是模板参数,我希望它与 一起工作uint8_t、uint16_t、uint32_t、uint64_t。所以我想:

template<size_t n, typename T>
inline T align_to(const T& num) {
static_assert(std::is_integral<T>::value, "integer required");
static_assert(n < sizeof(T) * 8, "overflow");
return num & (Ones(n));
}

问题是典型的用法是:

align_to<4, uint64_t>(some_uint64_t_var)

我希望编译器自动推导类型 uint64_t,我当然想提供 n。所以我正在寻找一种编译器只推导部分 os 模板 arguemtns 的方法。

最佳答案

您的align_to 函数将自动推导出T。它可以通过将 num 作为参数传递来推断:example on wandbox .

template <std::size_t n, typename T>
inline T align_to(const T& num)
{
// ...
}

int main()
{
std::int32_t x = 100;
align_to<16>(x); // `T` deduced as `std::int32_t`
}

参见 cppreference - template argument deduction了解规则概览。

关于c++ - 自动扣除部分模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39363996/

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