我们开发了一个分布式系统,该系统是用不同编程语言(C++,C#和Python)实现的组件构建的,并通过网络相互通信.系统中的所有组件都以相同的业务概念运行,并且在这些概念方面也相互通信.
结果,我们在以下两个挑战中奋力拼搏:
这个问题的一个天真的解决方案就是定义相同的数据结构(和序列化代码)三次(对于C++,C#和Python).
不幸的是,这种解决方案有严重的缺点:
我们考虑的另一个解决方案是基于ProtoBufs或Thrift等框架.这些框架具有内部语言,其中定义了业务概念,然后这些框架自动生成C++,C#和Python(以及序列化逻辑)中这些概念的表示.
虽然此解决方案没有上述问题,但它还有另一个缺点:这些框架生成的代码将表示底层业务概念的数据结构和序列化/反序列化这些数据结构所需的代码耦合在一起.
我们认为这污染了我们的代码库 - 我们系统中使用这些自动生成的类的任何代码现在都"熟悉"这种序列化/反序列化逻辑(严重的抽象泄漏).
我们可以通过我们的类/接口包装自动生成的代码来解决它,但这使我们回到了天真解决方案的缺点.
任何人都可以推荐解决所述问题的解决方案吗?
我有QT模型/视图框架的以下问题.我想在表视图项中呈现一个小部件.
首先我的想法是使用
void QAbstractItemView::setIndexWidget( const QModelIndex & index, QWidget * widget )
Run Code Online (Sandbox Code Playgroud)
但是该函数的文档明确指出:
此功能仅应用于显示与数据项对应的可见区域内的静态内容.如果要显示自定义动态内容或实现自定义编辑器窗口小部件,请改为子类QItemDelegate.
所以他们建议在这里使用代表.好吧,到目前为止一切顺利.我知道代理可能会用来创建一个编辑器,它基本上可以是任何QT小部件.但问题出在这里 - 我不希望这个小部件成为编辑器 - 我想总是用这个小部件渲染项目.而不只是"渲染",我需要它具有小部件的确切行为.
现在我想要使用的小部件是一个自定义小部件,它是一些其他小部件的容器(几个复选框,几个带有一些布局的按钮).
我考虑的解决方案是这样的:
这个解决方案似乎有效,但它对我来说闻起来很糟糕.任何人都可以为这个问题更优雅的解决方案?
谢谢.
我想在我的项目中为数据处理类创建一个模板接口.
我可以这样写:
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以这种方式接收模板参数,但是,如果我理解正确的话,他们会在那里使用大量的黑魔法.
我正在研究Qt项目,该项目需要可视化非常大的数据集(时间+值测量).非常大,我的意思是数百万的价值观.
我需要支持在时间轴上滚动这些值和放大/缩小操作.最终缩小应显示子采样的所有数据集以匹配窗口宽度.
以下是我用于绘制函数的Qt工具包:
我实际上有两个问题:
如果您对我的问题有任何其他相关评论/想法,请随时分享.
谢谢 :)
我的软件开发团队最近发现自己为我们的产品实现了几种不同的通信协议,以实现与各种外部产品的集成.
虽然每个协议都不同,但实施过程非常相似.以下是我见过的一些常见事情:
问题就出现了:你知道任何可以帮助我们自动化/简化上述过程的工具吗?
理想情况下,我希望有一个允许我执行以下操作的框架:
我要感谢任何帮助和/或建议.