当我不知道类型时如何将参数传递给函数

时间:2014-07-07 06:37:13

标签: c++ qt

我创建了一个应该从QTableWidget填充单元格的函数。对于此函数,我传入参数行the object。这是我的功能原型:

void remplirCaseDonnee(int myData, int row);

我的问题是:我的参数int myData现在可以是intboolenum

我该怎么办?当然有3个功能的解决方案,但它只是复制大量代码的粘贴。

4 个答案:

答案 0 :(得分:7)

另一种可能性是对myData使用QVariant,例如:

void remplirCaseDonnee(QVariant const& myData, int row)
{
  switch (myData.type())
  {
    case QVariant::Int:
    case QVariant::String:
    // ...
  }
}

并且不要忘记可以在boost旁边使用Qt,以便也可以使用Boost.AnyBoost.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);
}