gpt4 book ai didi

c++ - 条件模板类型数学

转载 作者:行者123 更新时间:2023-12-01 14:35:45 25 4
gpt4 key购买 nike

我有一个 C++ 函数,它接受一个 uint8_t 数组,在其上执行各种需要 uint16_t 的函数,并发出一个较小的 uint8_t数组。

对于 uint16_t 输入,我可能需要一个 uint32_t 数组等。

有没有办法使用模板建立这种关系?类似于(伪代码):

template <typename T, typename U = sizeof(T) * 2>

不幸的是,我实际上在混合 所以无法避免大量复制粘贴,但我想知道在某些情况下这是否是一种选择。

最佳答案

,您可以提供一个辅助模板函数,您可以使用它decltype 来找到您要返回的数组的返回类型。

#include <cstdint>
#include <type_traits> // std::is_same_v

template <typename T>
auto ret_type_helper()
{
if constexpr (std::is_same_v <T, std::uint8_t>) return std::uint16_t{};
else if constexpr (std::is_same_v <T, std::uint16_t>) return std::uint32_t{};
else if constexpr (std::is_same_v <T, std::uint32_t>) return std::uint64_t{};
// else if constexpr... for another type.....
}

template <typename T>
auto func(const std::array<T /*, size */>& arr)
{
// use for getting the array's type, which you want to return from the function
using ReType = decltype(ret_type_helper<T>());

std::array<ReType /*, size */> result;

// ... code
return result;
}

关于c++ - 条件模板类型数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63433188/

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