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

How to pass parameter to a function when I don't know the type

本文关键字:参数传递 函数 我不知道 类型      更新时间:2023-10-16

我做了一个函数,应该从QTableWidget填充单元格。对于这个函数,我传入行和the object参数。下面是我的函数的原型:

void remplirCaseDonnee(int myData, int row);

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

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

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

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

不要忘记,boost可以与Qt一起使用,这样Boost.AnyBoost.Variant也可以使用。

如果你想避免复制和粘贴,模板可能是你想要的。

template <typename T> void remplirCaseDonnee(T myData, int row);

使用以下代码:

template <class T>
void remplirCaseDonnee(T myData, int row);

你甚至可以使用void*,但在我的经验中它们很难使用:

void remplirCaseDonnee(void* myData, int row);

,并使用:

remplirCaseDonnee(&myData, 5);

您可以定义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);
}