我有一个公司对象,有不同的部门和员工.我已成功序列化我的对象并再次将其加载到我的程序中.
现在我想测试这两个对象是否在结构上相等.java是否为我提供了比较这些对象的工具?
我应该补充一点,我的对象有一个填充其他对象的列表.
或者我必须为此编写自己的测试?
编辑:
class test{
public int a
}
test t = new test();
t.a = 1;
test t1 = new test();
t1.a = 1;
Run Code Online (Sandbox Code Playgroud)
现在我想比较t和t1,如果它们的值相同则相同.
public interface Visitor<T> {
public void visit(T t);
}
interface VisitorCompany extends Visitor<Employee>, Visitor<Company>,
Visitor<Department>;
Run Code Online (Sandbox Code Playgroud)
我认为这样的东西在java中是不可能的?
然后是编码:使用未装箱的类型(无GC),最小化惰性结构分配.以包装形式保存长寿数据.测试和基准.
1.)什么是未装箱的类型?我很确定他正在谈论数据类型,例如Just x或IO y(盒装).但是newtypes怎么样?如果我理解正确,newtype根本没有开销,因此不应该算作盒装类型?
2.)他的意思是Keep long lived data around in packed form.什么?
3.)我还能做些什么来防止GC暂停?
我想知道是否可以在调试模式下运行特定代码.
例如这样的事情:
if DEBUG
print "Hello World"
Run Code Online (Sandbox Code Playgroud)
如果我处于调试模式,它只打印"Hello World",但是当我处于释放模式时,它应该被编译掉.这可能吗?
将此代码移植到f#时遇到一些问题
public class MyForm : Form
{
public MyForm ()
{
Text = "My Cross-Platform App";
Size = new Size (200, 200);
Content = new Label { Text = "Hello World!" };
}
[STAThread]
static void Main () {
var app = new Application();
app.Initialized += delegate {
app.MainForm = new MyForm ();
app.MainForm.Show ();
};
app.Run ();
}
}
Run Code Online (Sandbox Code Playgroud)
open System
open Eto.Forms
open Eto.Drawing
type MyWindow()=
inherit Form()
override this.Size = Size(500,500)
override this.Text = "test" // no …Run Code Online (Sandbox Code Playgroud) 我想在编译时为每种类型生成一个唯一的id.这可能在Rust吗?
到目前为止,我有以下代码
//Pseudo code
struct ClassTypeId{
id: &'static uint
}
impl ClassTypeId{
fn get_type<T>(&mut self) -> &'static uint {
let _id :&'static uint = self.id + 1;
self.id = _id;
_id
}
}
let c = ClassTypeId{id:0};
c.get_type::<i32>(); // returns 1
c.get_type::<f32>(); // returns 2
c.get_type::<i32>(); // returns 1
c.get_type::<uint>(); // returns 3
Run Code Online (Sandbox Code Playgroud)
我从C++库中偷走了这个想法,看起来像这样
typedef std::size_t TypeId;
template <typename TBase>
class ClassTypeId
{
public:
template <typename T>
static TypeId GetTypeId()
{
static const TypeId id = m_nextTypeId++;
return id;
} …Run Code Online (Sandbox Code Playgroud) template<typename T,typename F,typename R = typename std::result_of<F(T)>::type>
R operator>>(T t,F f){
return f(t);
}
int inc(int i){
return i + 1;
}
struct foo{
int i = 0;
};
void print_foo(foo f){
std::cout<< f.i << std::endl;
}
int get_foo_i(foo f){
return f.i;
}
int main()
{
foo f{1};
f >> print_foo;//works
int i = f >> get_foo_i;//works
int i2 = 5 >> inc;//invalid operants
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我创建了自己的>>运算符,就像管道一样.它适用于我的自定义类型,但它会打破已有>>运算符的类型.
是否可以为所有类型全局覆盖>>运算符?也许我可以使用命名空间来做到这一点?
5 pipe::>> inc
是否可以在 OpenGL 中增加缓冲区?
假设我想使用实例化渲染。每次在世界上生成一个新对象时,我都必须用实例化数据更新缓冲区。
在这种情况下,我有一个 3 个浮点数的缓冲区
std::vector<GLfloat> offsets = {0.0f,0.5f,1.0f};
auto offset_buffer = buffer::makeBuffer(BufferDraw::STATIC_DRAW, offsets);
Run Code Online (Sandbox Code Playgroud)
如果我想要 4 个元素怎么办?我必须用更大的尺寸调用 glBufferData 吗?但是旧数据会发生什么,它会被复制吗?或者我是否必须完全删除缓冲区并创建一个新缓冲区?
既然我们有直接的状态访问,我想知道为什么没有更新的glDraw*DSA函数.
例如glDrawArrays,依赖于当前的VAO,为什么没有glNamedDrawArrays呢?
我还有电话吗?
glBindVertexArray(vao);
glDrawArrays(..);
Run Code Online (Sandbox Code Playgroud)
还是有另一种方式?
我目前有以下问题我的函数模板必须在可变参数模板之前声明,编译器无法推断它.
template<class F, class... Ts>
void update(F f){
for(auto t: get_range<Ts...>()){
apply(std::forward<F>(f), t);
}
}
..
cg.update<decltype(ftest),int,float>(ftest);
..
Run Code Online (Sandbox Code Playgroud)
这个问题有一个很好的解决方法吗?我想这样称呼它
cg.update<int,float>(ftest);
Run Code Online (Sandbox Code Playgroud)
我相信在C++ 17中我可以写
template<class... Ts>
void update(auto f){
for(auto t: get_range<Ts...>()){
apply(f, t);
}
}
Run Code Online (Sandbox Code Playgroud)
但clang似乎还没有支持它.