gpt4 book ai didi

C++ : a helper to compare variadic unsigned int templates parameters

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:33 25 4
gpt4 key购买 nike

在混合了 CRTP、可变参数模板、元编程和运算符重载的类中,我想比较两个可变参数 unsigned int 模板参数,以便进行一些静态断言。我认为 helper structs 是一个很好的方法,但我不知道该怎么做。我考虑以下形式:

template<unsigned int... TDIM, unsigned int... TDIM0> struct HelperCheckDimensions
{
static const bool ok = /* SOMETHING */
};

其中 TDIMTDIM0 是我要比较的两个参数。它将允许我输入:

static_assert(HelperCheckDimensions<TDIM..., TDIM0...>::ok, "ERROR : Dimensions are different !");

只有当 sizeof...(TDIM)==sizeof...(TDIM0) AND TDIM[0] == TDIM0[0] 时,我才希望结果为真, TDIM[1] == TDIM0[1], ..., TDIM[n] == TDIM0[n]

怎么做?

非常感谢。

最佳答案

我会说这种形式的可变参数模板类没有意义:

template<unsigned int... TDIM, unsigned int... TDIM0> 
struct HelperCheckDimensions
{
//..
};

这没有意义,因为如果我这样写:

HelperCheckDimensions<1,2,3,4,5,6> z;

然后呢TDIMTDIM0应该?编译器应该如何对参数进行分区?

这是正确的吗:

TDIM = (1,2)
TDIM0 = (3,4,5,6)

或者这是正确的:

TDIM = (1)
TDIM0 = (2,3,4,5,6)

或者这个:

TDIM = (1,2,3,4)
TDIM0 = (5,6)

希望这有助于说明为什么它没有意义。


来自您的评论:

Very good point ! But my question remains open... Maybe something of the form template<unsigned int... TDIM, typename TFAKE, unsigned int... TDIM0> would work ? What is the best solution?

标准不允许这种形式的模板定义:

template<unsigned int... TDIM, typename TFAKE, unsigned int... TDIM0>

我不知道为什么标准不允许它的原因,即使它对我来说是有意义的,至少在这种情况下(也许它给语言增加了不值得的复杂性)。根据标准,template-parameter-pack 必须是模板定义的last 参数。

如果你在 GCC 中编译上面的代码,它会给出这个错误:

error: parameter pack 'TDIM' must be at the end of the template parameter list

希望对您有所帮助。

关于C++ : a helper to compare variadic unsigned int templates parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895984/

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