gpt4 book ai didi

c++ - 如何将 C++ 模型的实验版本与黄金引用进行比较?

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:43 25 4
gpt4 key购买 nike

我编写了一个具有输入、输出和内部变量的 C++ 模型。在这种情况下,输入是样本流 x[n]。输出和内部变量也是样本流。我将此版本的代码称为“黄金引用”。

我也想到了一些我想尝试的代码优化。我将此版本的代码称为“实验性”。但我想确保任何更改都不会破坏代码。也就是说,实验代码的输入、输出和一些内部变量与黄金引用相匹配。

因此对于示例流输入,我想检查实验代码输入、输出和内部变量是否与黄金引用相匹配。

但我正在尝试考虑一种代码/构建结构,允许我同时运行两个版本,同时对文件名、类名等进行最少的更改。

到目前为止,在我看来最简单的解决方案是编辑实验代码库中的每个文件并重命名命名空间和#include 路径。有没有不需要大量重命名的更好的解决方案?

由于模板等原因,大多数代码驻留在头文件中。

// Golden src/top.h
#include "src/sub1.h"
#include "src/sub2.h"
namespace model {
class Top {
public:
Sub1 sub1;
Sub2 sub2;
Var var;
Var process(Var x) {
var = sub1.process(x);
return sub2.process(var);
}
};
}
// Experimental src_expr/top.h
#include "src_expr/sub1.h" // Have to edit include paths!
#include "src_expr/sub2.h"
namespace model_expr { // Have to rename namespaces!
class Top {
public:
Sub1 sub1;
Sub2 sub2;
Var var;
Var process(Var x) {
var = sub1.process(x);
return sub2.process(var);
}
};
}
// test.cpp
#include "src/top.h" // golden
#include "src_expr/top.h" // experimental
void test(std::vector<Var> xvec) {
model::Top top_gold;
model_expr::Top top_expr;
for (const auto& x : xvec) {
Var y_gold = top_gold.process(x);
Var y_expr = top_expr.process(x);
assert(y_gold == y_expr);
assert(top_gold.var == top_expr.var);
}
}

最佳答案

一种方法是使您的代码可模拟。

这意味着您提供一个界面并且只与之交互。方法尽可能纯(包括作为输入和输出的对象)。您通过可模拟的工厂对象创建实例。

然后编写创建两个 版本的接口(interface)的实现,比较它们的输出,如果它们不同则出错,并在外部表现得像其中一个。

遗憾的是,这可能需要进行重大重构;理想情况下,您在编写第一个版本之前执行此操作。

关于c++ - 如何将 C++ 模型的实验版本与黄金引用进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57385126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com