我有一个大型的跨平台(Linux和Windows)C++项目,我想为其创建一个GUI.
关于此类项目的GUI基本原理,我几乎没有一般性的问题:
我知道钻石继承被认为是不好的做法.但是,我有2个案例,我认为钻石继承可以很好地适应.我想问一下,您是否会建议我在这些情况下使用钻石继承,或者是否有其他设计可能更好.
案例1:我想在我的系统中创建代表不同类型"动作"的类.这些操作按以下几个参数进行分类:
我打算有以下设计:
// 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) 我的代码是针对多个.dll文件构建的,我有一个具有静态成员变量的模板类.
我希望这个静态成员变量的相同实例在所有dll中都可用,但它不起作用:我在每个中看到不同的实例(不同的值).
当我不使用模板时,没有问题:初始化其中一个源文件中的静态成员,并在类上使用__declspec(dllexport)和__declspec(dllimport)指令.但它不适用于模板.有没有办法使它工作?
我看到一些使用"extern"的提议解决方案,但我认为我不能使用它,因为我的代码应该与visual studio 2002和2005一起使用.
谢谢.
澄清:我希望每种不同类型的模板实例都有一个不同的静态变量实例.但是如果我在2个不同的dll中实例化具有相同类型的模板,我希望在它们中都有相同的变量.
我将为现有的C++应用程序开发一个新的GUI.该应用程序适用于Windows和Linux,与GUI的通信是通过客户端/服务器进行的.
Eclipse RCP和Qt之间的优缺点是什么?
我想用继承的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的私有.
所以我看到一些解决方法:
我应该选择什么?
有没有办法设置Perl脚本的浮点精度(3位数),而不必专门为每个变量更改它?
类似于TCL的东西:
global tcl_precision
set tcl_precision 3
Run Code Online (Sandbox Code Playgroud) $VAR1 = [
'830974',
'722065',
'722046',
'716963'
];
Run Code Online (Sandbox Code Playgroud)
如何计算值"722065"的数组索引?
如果我有一个工厂,它创建一个对象并返回一个指向它的指针,那么删除它的更好方法是什么:
通过delete"用户"代码调用,或通过DestructObject我应该与工厂一起使用的新功能?
我有一个整数变量,可以得到一个大于4294967295的值.
我应该使用什么类型(长,或双,或其他)?
是否存在switch(case)是战略或类似模式的良好设计选择(简单除外)的情况......
c++ ×6
inheritance ×2
oop ×2
perl ×2
arrays ×1
dll ×1
eclipse-rcp ×1
factory ×1
pimpl-idiom ×1
qt ×1
static ×1
templates ×1
types ×1