小编Igo*_*Oks的帖子

如何为大型跨平台C++项目编写GUI?

我有一个大型的跨平台(Linux和Windows)C++项目,我想为其创建一个GUI.

关于此类项目的GUI基本原理,我几乎没有一般性的问题:

  1. GUI应该与应用程序的逻辑分开吗?
  2. 如果它是分开的,逻辑和GUI应该如何通信?TCP/IP套接字是一个不错的选择吗?还有什么其他可能性?
  3. 使用不同于C++的语言使用GUI是一个好主意吗?如果是 - 哪种语言?
  4. 拥有基于浏览器的GUI是一个好主意吗?
  5. 即使项目的核心逻辑是跨平台的,我可以决定GUI只是基于Windows(.NET?),它将通过Socket或类似方法与相关Win/Linux机器上的逻辑进行通信.这样做是个好主意吗?

c++ user-interface cross-platform

21
推荐指数
1
解决办法
5864
查看次数

钻石继承(C++)

我知道钻石继承被认为是不好的做法.但是,我有2个案例,我认为钻石继承可以很好地适应.我想问一下,您是否会建议我在这些情况下使用钻石继承,或者是否有其他设计可能更好.

案例1:我想在我的系统中创建代表不同类型"动作"的类.这些操作按以下几个参数进行分类:

  • 动作可以是"读取"或"写入".
  • 动作可以延迟或没有延迟(它不仅仅是1个参数.它会显着改变行为).
  • 动作的"流类型"可以是FlowA或FlowB.

我打算有以下设计:

// abstract classes
class Action  
{
    // methods relevant for all actions
};
class ActionRead      : public virtual Action  
{
    // methods related to reading
};
class ActionWrite     : public virtual Action  
{
    // methods related to writing
};
class ActionWithDelay : public virtual Action  
{
    // methods related to delay definition and handling
};
class ActionNoDelay   : public virtual Action  {/*...*/};
class ActionFlowA     : public virtual Action  {/*...*/};
class ActionFlowB     : public …
Run Code Online (Sandbox Code Playgroud)

c++ oop inheritance multiple-inheritance diamond-problem

19
推荐指数
3
解决办法
1万
查看次数

模板中的静态成员变量,具有多个dll

我的代码是针对多个.dll文件构建的,我有一个具有静态成员变量的模板类.

我希望这个静态成员变量的相同实例在所有dll中都可用,但它不起作用:我在每个中看到不同的实例(不同的值).

当我不使用模板时,没有问题:初始化其中一个源文件中的静态成员,并在类上使用__declspec(dllexport)和__declspec(dllimport)指令.但它不适用于模板.有没有办法使它工作?

我看到一些使用"extern"的提议解决方案,但我认为我不能使用它,因为我的代码应该与visual studio 2002和2005一起使用.

谢谢.

澄清:我希望每种不同类型的模板实例都有一个不同的静态变量实例.但是如果我在2个不同的dll中实例化具有相同类型的模板,我希望在它们中都有相同的变量.

c++ dll static templates visual-studio-2005

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

C++ Qt与Eclipse RCP在跨平台GUI开发方面的优缺点是什么?

我将为现有的C++应用程序开发一个新的GUI.该应用程序适用于Windows和Linux,与GUI的通信是通过客户端/服务器进行的.

Eclipse RCP和Qt之间的优缺点是什么?

user-interface qt cross-platform eclipse-rcp

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

Pimpl成语与继承

我想用继承的pimpl习语.

这是基础公共类及其实现类:

class A
{
    public:
      A(){pAImpl = new AImpl;};
      void foo(){pAImpl->foo();};
    private:
      AImpl* pAImpl;  
};
class AImpl
{
    public:
      void foo(){/*do something*/};
};
Run Code Online (Sandbox Code Playgroud)

我希望能够使用其实现类创建派生公共类:

class B : public A
{
    public:
      void bar(){pAImpl->bar();};    // Can't do! pAimpl is A's private.
};        

class BImpl : public AImpl
{
    public:
      void bar(){/*do something else*/};
};
Run Code Online (Sandbox Code Playgroud)

但我不能在B中使用pAimpl,因为它是A的私有.

所以我看到一些解决方法:

  1. 在B中创建BImpl*pBImpl成员,并使用附加的A构造函数A(AImpl*)将其传递给A.
  2. 更改要保护的pAImpl(或添加Get函数),并在B中使用它.
  3. B不应该继承自A.在B中创建BImpl*pBImpl成员,并在B中创建foo()和bar(),这将使用pBImpl.
  4. 还有其他方法吗?

我应该选择什么?

c++ oop inheritance pimpl-idiom

16
推荐指数
1
解决办法
9849
查看次数

如何在Perl中设置浮点精度?

有没有办法设置Perl脚本的浮点精度(3位数),而不必专门为每个变量更改它?

类似于TCL的东西:

global tcl_precision
set tcl_precision 3
Run Code Online (Sandbox Code Playgroud)

floating-point perl floating-accuracy

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

在Perl中,如何在数组中找到给定值的索引?

$VAR1 = [
          '830974',
          '722065',
          '722046',
          '716963'
        ];
Run Code Online (Sandbox Code Playgroud)

如何计算值"722065"的数组索引?

arrays perl

14
推荐指数
4
解决办法
4万
查看次数

删除工厂创建的对象的位置?

如果我有一个工厂,它创建一个对象并返回一个指向它的指针,那么删除它的更好方法是什么:

通过delete"用户"代码调用,或通过DestructObject我应该与工厂一起使用的新功能?

c++ design-patterns factory

14
推荐指数
1
解决办法
5496
查看次数

在C++中大于2 ^ 32的整数使用什么类型?

我有一个整数变量,可以得到一个大于4294967295的值.

我应该使用什么类型(长,或双,或其他)?

c++ types

13
推荐指数
4
解决办法
3万
查看次数

Switch(Case)总是错的吗?

是否存在switch(case)是战略或类似模式的良好设计选择(简单除外)的情况......

language-agnostic design-patterns switch-statement

11
推荐指数
4
解决办法
3686
查看次数