如何通过可变参数模板表达概念?

问题描述

我想定义一个仅具有特定类型值的元组就可以满足的概念。

为了简单起见,我只想接受只包含数字类型元素的元组。我该怎么办?

例如

std::tuple<int16_t,int32_t> // satisfies concept
std::tuple<std::string,double> // doesn't satisfy concept

问题是我必须制定类似“ for_each_type”的内容。同样,递归概念也是不允许的。

解决方法

足够简单:

namespace impl {
    template <class T>
    struct is_tuple_of_integrals
    : std::false_type { };
    
    template <std::integral... Ts>
    struct is_tuple_of_integrals<std::tuple<Ts...>>
    : std::true_type { };
}

template <class T>
concept tuple_of_integrals = impl::is_tuple_of_integrals<T>::value;

我确实想知道是否可以忽略中间特征,但是缺少我不相信的概念专长。

,

我的解决方案:

const myForm = new FormGroup({
      email: new FormControl('',[Validators.required,Validators.email])});

const dialogRef = this.dialogService.open(CustomDialogComponent,{
        hasBackdrop: true,disableClose: true,panelClass: 'myapp-no-padding-dialog',data: {
          title: 'Title',*formGroup: myForm*
        }
      });

我用折叠表达这个概念。