小编Mai*_*ein的帖子

测试两个物体在结构上是否相等?

我有一个公司对象,有不同的部门和员工.我已成功序列化我的对象并再次将其加载到我的程序中.

现在我想测试这两个对象是否在结构上相等.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,如果它们的值相同则相同.

java

2
推荐指数
1
解决办法
948
查看次数

编写几个通用接口的接口

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中是不可能的?

java

2
推荐指数
1
解决办法
183
查看次数

避免垃圾收集

/sf/answers/1067057771/

然后是编码:使用未装箱的类型(无GC),最小化惰性结构分配.以包装形式保存长寿数据.测试和基准.

1.)什么是未装箱的类型?我很确定他正在谈论数据类型,例如Just xIO y(盒装).但是newtypes怎么样?如果我理解正确,newtype根本没有开销,因此不应该算作盒装类型?

2.)他的意思是Keep long lived data around in packed form.什么?

3.)我还能做些什么来防止GC暂停?

garbage-collection haskell

2
推荐指数
1
解决办法
609
查看次数

F#中有ifdef吗?

我想知道是否可以在调试模式下运行特定代码.

例如这样的事情:

if DEBUG
 print "Hello World"
Run Code Online (Sandbox Code Playgroud)

如果我处于调试模式,它只打印"Hello World",但是当我处于释放模式时,它应该被编译掉.这可能吗?

f#

2
推荐指数
1
解决办法
708
查看次数

处理2个编译器错误,将C#转换为F#

将此代码移植到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)

c# f#

2
推荐指数
1
解决办法
124
查看次数

在编译时为类型生成唯一ID

我想在编译时为每种类型生成一个唯一的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)

rust

2
推荐指数
2
解决办法
1773
查看次数

是否可以覆盖运营商?

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

c++ c++11 c++14

2
推荐指数
1
解决办法
122
查看次数

如何增加缓冲区 OpenGL?

是否可以在 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 吗?但是旧数据会发生什么,它会被复制吗?或者我是否必须完全删除缓冲区并创建一个新缓冲区?

opengl

2
推荐指数
1
解决办法
861
查看次数

绘制*函数的直接状态访问?

既然我们有直接的状态访问,我想知道为什么没有更新的glDraw*DSA函数.

例如glDrawArrays,依赖于当前的VAO,为什么没有glNamedDrawArrays呢?

我还有电话吗?

glBindVertexArray(vao);
glDrawArrays(..);
Run Code Online (Sandbox Code Playgroud)

还是有另一种方式?

opengl

2
推荐指数
1
解决办法
528
查看次数

如何在varidic模板之前推导出模板

我目前有以下问题我的函数模板必须在可变参数模板之前声明,编译器无法推断它.

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似乎还没有支持它.

c++ c++14 c++17

2
推荐指数
1
解决办法
71
查看次数

标签 统计

c++ ×2

c++14 ×2

f# ×2

java ×2

opengl ×2

c# ×1

c++11 ×1

c++17 ×1

garbage-collection ×1

haskell ×1

rust ×1