gpt4 book ai didi

c++ - 在 C++ 中提取和操作模板参数

转载 作者:行者123 更新时间:2023-11-27 22:59:56 25 4
gpt4 key购买 nike

我正在尝试实现一个可以返回其模板参数总和的模板。模板参数的数量各不相同,因此我想制作一个接受参数包的可变参数模板。我能够制作一个可以执行以下操作的函数模板:

Sum(1,2,3)

但我也希望能够做类似的事情:

Sum<1,2,3>())

有人可以解释我如何提取这些模板参数并将这些参数的总和存储在类似结构的东西中吗?

已经谢谢了!

最佳答案

您可以使用可变参数模板、模板特化和编译时递归。​​

// Forward-declaration of a `Sum` variadic template class
// that takes some integers as template parameters
template<int...>
struct Sum;

// Case 0: variadic template pack is not empty
// (match one integer `TX` and any remaining integers `TXs...`)
// (`TXs...` can be empty)
template<int TX, int... TXs>
struct Sum<TX, TXs...>
: std::integral_constant<int, TX + Sum<TXs...>::value>
{

};

// Case 1: variadic template pack is empty
template<>
struct Sum<>
: std::integral_constant<int, 0>
{

};

int main()
{
assert(Sum<1, 2, 3>::value == 6);
}

另外,如果你有一个已经可以工作的 constexpr 函数 getSum(...),你可以用一个结构来包装它:

template<int... TXs> 
struct Sum
{
constexpr static int value{getSum(TXs...)};
};

关于c++ - 在 C++ 中提取和操作模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796138/

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