0

我正在尝试查看是否可以使用在 lambda 中不可默认构造的参数作为折叠表达式的一部分。T如果默认可构造,则以下代码有效。

template <typename ...T>
struct X
{
   void foo()
   {
    ([](const T&)
    {
       if (sizeof(T) < 4)
       {
          std::cout << "Small block size: " << sizeof(T) << std::endl;
       }
    }(T{}), ...);

    // Print sizes
    ((std::cout << sizeof(T) << std::endl), ...);
   }
};

struct A {
   int a[100];
   };
struct B
{
};

int main()
{
   X<A,B> x;
   x.foo();
}

输出

Small block size: 1
400
1
4

1 回答 1

4

lambda 不需要参数:

([]{
    if (sizeof(T) < 4)
    {
       std::cout << "Small block size: " << sizeof(T) << std::endl;
    }
}(), ...);
于 2021-01-10T18:31:53.667 回答