具有Armadillo可选参数的函数

问题描述 投票:1回答:1

我需要用可选参数构建一个函数。看来我应该给参数一个默认值。例如,当可选参数类型为double或integer时,此方法非常有效。我可以将默认值设置为0或NULL。但假设可选参数是犰狳矩阵。我不知道定义一个NULL矩阵。我检查这段代码,但它不起作用。

  mat test(mat& X, mat& Y = zeros(2,2).clear()){
  if(Y.empty()){return X;}
    return X*Y;
  }

我想将Y的默认值设置为void(或空)矩阵。然后我可以使用if命令检查Y是否为空。

c++ function armadillo
1个回答
0
投票

我想你想要is_empty而不是empty

成员函数resetdocumented,使矩阵为空。但我怀疑默认构造的矩阵也是空的。

但是,您有一个更大的问题 - 您通过非const引用传递参数Y,因此您根本不能使用临时表达式作为默认参数。 (通过const引用传递会更糟,因为你最终会得到一个悬空引用。)我建议通过值传递,或者通过const引用并为空矩阵定义一个静态常量:

mat const Empty = mat();
mat test(mat const & X, mat const & Y = Empty) { ... }

要么

mat test(mat X, mat Y = mat()) { ... }
© www.soinside.com 2019 - 2024. All rights reserved.