小编Lev*_*Lev的帖子

如何跨不同的编程语言分享业务概念?

我们开发了一个分布式系统,该系统是用不同编程语言(C++,C#和Python)实现的组件构建的,并通过网络相互通信.系统中的所有组件都以相同的业务概念运行,并且在这些概念方面也相互通信.

结果,我们在以下两个挑战中奋力拼搏:

  1. 保持我们的业务概念在这三种语言中的表现同步
  2. 跨这些语言对我们的业务概念进行序列化/反序列化

这个问题的一个天真的解决方案就是定义相同的数据结构(和序列化代码)三次(对于C++,C#和Python).

不幸的是,这种解决方案有严重的缺点:

  • 它创造了很多"代码重复"
  • 它需要大量的跨语言集成测试才能使所有内容保持同步

我们考虑的另一个解决方案是基于ProtoBufs或Thrift等框架.这些框架具有内部语言,其中定义了业务概念,然后这些框架自动生成C++,C#和Python(以及序列化逻辑)中这些概念的表示.

虽然此解决方案没有上述问题,但它还有另一个缺点:这些框架生成的代码将表示底层业务概念的数据结构和序列化/反序列化这些数据结构所需的代码耦合在一起.

我们认为这污染了我们的代码库 - 我们系统中使用这些自动生成的类的任何代码现在都"熟悉"这种序列化/反序列化逻辑(严重的抽象泄漏).

我们可以通过我们的类/接口包装自动生成的代码来解决它,但这使我们回到了天真解决方案的缺点.

任何人都可以推荐解决所述问题的解决方案吗?

c# c++ python serialization cross-language

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

如何在QT中的树视图项内渲染复杂的小部件?

我有QT模型/视图框架的以下问题.我想在表视图项中呈现一个小部件.

首先我的想法是使用

void QAbstractItemView::setIndexWidget( const QModelIndex & index, QWidget * widget )
Run Code Online (Sandbox Code Playgroud)

但是该函数的文档明确指出:

此功能仅应用于显示与数据项对应的可见区域内的静态内容.如果要显示自定义动态内容或实现自定义编辑器窗口小部件,请改为子类QItemDelegate.

所以他们建议在这里使用代表.好吧,到目前为止一切顺利.我知道代理可能会用来创建一个编辑器,它基本上可以是任何QT小部件.但问题出在这里 - 我不希望这个小部件成为编辑器 - 我想总是用这个小部件渲染项目.而不只是"渲染",我需要它具有小部件的确切行为.

现在我想要使用的小部件是一个自定义小部件,它是一些其他小部件的容器(几个复选框,几个带有一些布局的按钮).

我考虑的解决方案是这样的:

  1. 将我的自定义小部件的外观抓取到像素图.
  2. 让委托使用这个像素图绘制自己.
  3. 当鼠标悬停在某个项目上时会导致视图自动开始编辑(我不
    知道该怎么做,但我想这是可能的)
  4. 让委托创建我的小部件作为项目的编辑器.

这个解决方案似乎有效,但它对我来说闻起来很糟糕.任何人都可以为这个问题更优雅的解决方案?

谢谢.

qt delegates view

9
推荐指数
1
解决办法
5315
查看次数

将方法的签名作为模板参数传递给类

我想在我的项目中为数据处理类创建一个模板接口.

我可以这样写:

template <class T>
class DataHandler
{
    public:
        void Process(const& T) = 0;
};
Run Code Online (Sandbox Code Playgroud)

然后,假设我以这种方式定义一个类:

class MyClass: public DataHandler<int> 
{
    void Process(const int&) { /* Bla-bla */ }
}
Run Code Online (Sandbox Code Playgroud)

现在,来问题,我可以以某种方式定义我的模板接口,作为参数,它不仅会收到类型T,而且会收到Process()函数的整个签名.

我想用这种方式工作:

class MyClass: public DataHandler<void (int&)> 
{
    void Process(const int&) { /* Bla-bla */ }
}
Run Code Online (Sandbox Code Playgroud)

可能吗?我知道,例如,boost :: signal以这种方式接收模板参数,但是,如果我理解正确的话,他们会在那里使用大量的黑魔法.

c++ templates

8
推荐指数
1
解决办法
2054
查看次数

在QT中可视化大型数据集的最佳方法是什么

我正在研究Qt项目,该项目需要可视化非常大的数据集(时间+值测量).非常大,我的意思是数百万的价值观.

我需要支持在时间轴上滚动这些值和放大/缩小操作.最终缩小应显示子采样的所有数据集以匹配窗口宽度.

以下是我用于绘制函数的Qt工具包:

  1. QWT
  2. HippoDraw
  3. KD图表

我实际上有两个问题:

  1. 你知道使用Qt绘图功能的任何其他工具包吗?
  2. 以上哪些工具更适合我的目的?

如果您对我的问题有任何其他相关评论/想法,请随时分享.

谢谢 :)

user-interface plot qt

5
推荐指数
1
解决办法
6782
查看次数

协议仿真工具

我的软件开发团队最近发现自己为我们的产品实现了几种不同的通信协议,以实现与各种外部产品的集成.

虽然每个协议都不同,但实施过程非常相似.以下是我见过的一些常见事情:

  1. 特定通信协议总是在某些标准协议(UDP,TCP/IP,串行,CAN)之上定义,并包括从一侧传递到另一侧的一组消息.这些消息的结构是由协议预定义和描述的.
  2. 在我们的产品中实现此协议始终从基于协议提供的信息编写C++头文件开始.
  3. 为了允许早期集成周期并正确测试我们的代码,我们总是发现自己正在开发实现我们/他们的协议方面的模拟器.

问题就出现了:你知道任何可以帮助我们自动化/简化上述过程的工具吗?

理想情况下,我希望有一个允许我执行以下操作的框架:

  1. 用某种编辑器/形式语言定义协议
  2. 以人类可读的格式将协议定义导出到Doc/PDF
  3. 将协议定义导出到C++头文件(可能还有其他语言)
  4. 基于协议定义自动(或半自动)在通信中产生双方的模拟器

我要感谢任何帮助和/或建议.

simulator protocols

5
推荐指数
1
解决办法
1493
查看次数