给定以下(伪)代码:
typedef std::map<const unsigned int, unsigned long int> ModelVector;
typedef std::vector<unsigned long int> EncryptedVector;
int test1 (const EncryptedVector &x)
{
//compute ModelVector y
data = kenel1(x, y);
//compute output
}
int test2 (const EncryptedVector &xx)
{
//compute ModelVector y
data = kenel2(xx, y);
//compute output
}
int test3 (const EncryptedVector &x, const EncryptedVector &xx)
{
//compute ModelVector y
data = kenel3(x, xx, y);
//compute output
}
int test4 (const EncryptedVector &x, const EncryptedVector &xSquared)
{
//compute ModelVector y
data = kenel4(x, xSquared, y);
//compute output
}
因为变量 y 和 output 在所有 4 个函数中的计算相同,并且由于我有一个“全局”对象,它允许我通过 switch 语句选择适当的内核函数,所以我想知道是否有更优雅的方式来编写它们,最好是以某种方式合并它们...
例如,像这样的东西(伪代码)将是一个不错的选择:
int test (const EncryptedVector &x, const EncryptedVector &xx, const EncryptedVector &xSquared)
{
//compute ModelVector y
//switch (kernel) -> select the appropriate one
//compute output
}
test (x, NULL, NULL);//test1
test (NULL, xx, NULL);//test2
test (x, xx, NULL);//test3
test (x, NULL, xSquared);//test4
或者,更好的是,我可以使用不同的参数组合多次声明 test,所有这些都回退到上面的那个(即使我会失去 x 和 xx 之间的语义区别)。
上述方法的问题是 C++ 不允许我传递 NULL 而不是 std::vector ,我认为我最好重复代码 4 次而不是通过指针传递变量而不是通过引用传递它们。 ..
有没有其他方法可以做到这一点?
编辑:这是内核函数的原型:
int kernel1 (const EncryptedVector &x, const ModelVector &y);
int kernel2 (const EncryptedVector &xx, const ModelVector &y);
int kernel3 (const EncryptedVector &x, const EncryptedVector &xx, const ModelVector &y);
int kernel4 (const EncryptedVector &x, const EncryptedVector &xSquared, const ModelVector &y);