由于数据类型在运行时变化而卡在设计上
Stuck on Design due to the data type varying at run time
我的C++/Qt应用程序中有一个类,它有一些成员变量,其数据类型在运行时可能会有所不同,具体取决于用户选择的选项。这些成员变量具有相应的 getter 和 setter 方法。
现在,我尝试使用以下 2 种方法解决此问题,但没有一种有效。
方法1:我创建了一个基类"Base",并从中派生了3个类,即"IntProperty","FloatProperty"和"StringProperty"。现在这 3 个类分别具有 int、float 和字符串类型的相应成员变量及其 getter 和 setter。我将公共成员变量和方法保留在基类中。问题是我无法使用基类对象调用派生类的方法。请提供与方法 1 对应的代码以更清晰。
方法2:我尝试使用模板解决它,但它的问题是用户程序是一个Qt类,其中定义了Q_OBJECT宏,并且错误地说不能将模板与Q_OBJECT一起使用。为清楚起见,请参阅方法 2 的代码。
我被困在其中,想不出可以解决这个问题的设计模式或其他技术。我已经不眠不休地编程了几个晚上,如果我没有得到答案,明天就会死去。
/****************** Approach 1 ******************/
class Base
{
...
}
class IntProperty : public Base
{
public:
int getProp() { return prop; }
private:
int prop;
}
class FloatProperty : public Base
{
public:
double getProp() { return prop; }
private:
double prop;
}
class StringProperty : public Base
{
public:
string getProp() { return prop; }
private:
string prop;
}
class UserProgram : public QDialog
{
Q_OBJECT
private:
Base* base;
public:
void user()
{
/// Trying to take the advantage of runtime polymorphism
Base* base = new IntProperty();
base->getProp(); /// compile time error. Ofcourse because there is no
/// method named getProp() in Base class. I am unable
/// to define this method in base class because I cannot decide what should I keep the return type for
/// this method.
}
}
/******************* Approach 2 *********************/
template <typename T>
class Base
{
private:
T prop;
public:
T getProp() { return prop; }
}
template <typename T>
class UserProgram() : public QDialog
{
Q_OBJECT
public:
void user()
{
base = new Base<T>;
}
private:
Base<T>* base; /// error cannot use template with Q_OBJECT
}
QVariant 类(在注释中引用(正是这样做的。它旨在存储不同类型的值。可以检查它以确定存储的类型,也可以传递它、将其存储到设置等。没有必要重新发明它。
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何获取C++字符数据类型的地址
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 构造智能点数据类型以及普通数据类型的通用方法
- 如何使映射键具有两种不同的数据类型?
- 由于数据类型在运行时变化而卡在设计上
- 为什么数据类型的大小会随着操作系统的变化而变化
- 结构的大小如何随着不同的数据类型而变化
- 根据数据类型,展开后可变元组顺序会发生变化