相关疑难解决方法(0)

在C++ 11中用"auto"推导出lambda的类型是什么?

我有一种感觉,lambda的类型是一个函数指针.当我进行以下测试时,我发现它是错误的(演示).

#define LAMBDA [] (int i) -> long { return 0; }
int main ()
{
  long (*pFptr)(int) = LAMBDA;  // ok
  auto pAuto = LAMBDA;  // ok
  assert(typeid(pFptr) == typeid(pAuto));  // assertion fails !
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是否缺少任何一点?如果不是那么,typeofauto关键字推导出的lambda表达式是什么?

c++ lambda typeof auto c++11

129
推荐指数
4
解决办法
3万
查看次数

如何创建一个可变的通用lambda?

从C++ 14开始,我们可以使用泛型lambdas:

auto generic_lambda = [] (auto param) {};
Run Code Online (Sandbox Code Playgroud)

这基本上意味着它的调用操作符基于标记为auto的参数进行模板化.

问题是如何创建一个可以接受可变参数数量的lambda,类似于可变参数函数模板的工作方式?如果这不可能,最接近的东西可以用同样的方法吗?你会怎么存储它?有可能std::function吗?

c++ lambda variadic c++14

37
推荐指数
3
解决办法
2万
查看次数

c ++:将向量转换为元组

如何将std :: vector转换为std :: tuple?我有

class T { };
int cnt = 3;
vector<T*> tv;
for (int i = 0; i < cnt; ++i) {
  tv.push_back(new T());
}
Run Code Online (Sandbox Code Playgroud)

我想得到

auto tp = std::tie(*tv[0], *tv[1], *tv[2]);
Run Code Online (Sandbox Code Playgroud)

我怎么能得到这个tp?如果cnt足够大,我不能手动编写这个tp.

  std::vector<
  ConvConnection<
  decltype(inputLayer),
  decltype(*C1[0]),
  decltype(*Conn1Opt[0]),
  RandomInitialization<arma::mat>,
  arma::mat
  >* > Conn1(6);

  for (size_t i = 0; i < 6; ++i) {
    Conn1.push_back(new  ConvConnection<
                    decltype(inputLayer),
                    decltype(*C1[0]),
                    decltype(*Conn1Opt[0]),
                    RandomInitialization<arma::mat>,
                    arma::mat
                    >(inputLayer, *C1[i], *Conn1Opt[i], 5, 5));
  }
Run Code Online (Sandbox Code Playgroud)

这是代码.这里只有6,但我还需要一些大小超过100的向量.我需要将这个向量转换为元组.

c++ tuples c++11

9
推荐指数
3
解决办法
6512
查看次数

标签 统计

c++ ×3

c++11 ×2

lambda ×2

auto ×1

c++14 ×1

tuples ×1

typeof ×1

variadic ×1