我创建了一个应该从QTableWidget填充单元格的函数。对于此函数,我传入参数行the object
。这是我的功能原型:
void remplirCaseDonnee(int myData, int row);
我的问题是:我的参数int myData
现在可以是int
,bool
或enum
。
我该怎么办?当然有3个功能的解决方案,但它只是复制大量代码的粘贴。
答案 0 :(得分:7)
另一种可能性是对myData使用QVariant
,例如:
void remplirCaseDonnee(QVariant const& myData, int row)
{
switch (myData.type())
{
case QVariant::Int:
case QVariant::String:
// ...
}
}
并且不要忘记可以在boost
旁边使用Qt
,以便也可以使用Boost.Any
和Boost.Variant
。
答案 1 :(得分:5)
如果您想避免复制和粘贴,templates可能就是您想要的。
template <typename T> void remplirCaseDonnee(T myData, int row);
答案 2 :(得分:2)
使用此代码:
template <class T>
void remplirCaseDonnee(T myData, int row);
您甚至可以使用void*
,但根据我的经验,它们很难使用:
void remplirCaseDonnee(void* myData, int row);
并将其命名为:
remplirCaseDonnee(&myData, 5);
答案 3 :(得分:0)
您可以定义3个函数而无需复制实现,例如:
void remplirCaseDonnee(int myData, int row) {
// Original implementation.
...
}
void remplirCaseDonnee(bool myData, int row) {
remplirCaseDonnee(static_cast<int>(myData), row);
}
void remplirCaseDonnee(EnumType myData, int row) {
remplirCaseDonnee(static_cast<int>(myData), row);
}