获取在变量参数列表中传递的参数类型

Ala*_*ler 5 c++ opencv variadic-functions

我编写了一个带有变量参数列表的函数

void cvShowMatImages( char* title, int nArgs, ...)  // Mat Images
Run Code Online (Sandbox Code Playgroud)

传递的参数是openCV图像.我实际上有两种不同的功能,用于2种图像格式IplImage和Mat,上面提到的和第二种

void cvShowIplImages( char* title, int nArgs, ...)  // Ipl Images
Run Code Online (Sandbox Code Playgroud)

但我无法混合两种类型的图像.如果我能够确定传递的参数类型,我可以解决我的问题,但我不知道该怎么做.这就是我读这个论点的方式:

// Get the images passed as arguments
va_list args;
// Initialize the variable argument list
va_start( args, nArgs );
// Loop on each image
for ( int num = 0; num < nArgs; num++ )
{
   // Get the image to be copied from the argument list
   srcImg = va_arg( args, Mat );
   ...
Run Code Online (Sandbox Code Playgroud)

对于IplImage:

srcImg = va_arg( args, IplImage* );
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,srcImg都声明为

Mat srcImg
Run Code Online (Sandbox Code Playgroud)

因为有一个重载的operator = for IplImage.有没有办法解决这个问题?

Bal*_*Pal 0

我宁愿考虑传递元组或数组或向量。

与带有 N 的模板一样std::array,也可以使您的函数成为带有 N 的模板,并以通用方式实现。如果您的编译器适合的话,可变参数模板也是可行的。

...是我们试图摆脱的东西。传递任何非 POD 的内容是未定义的行为,并且不可能进行类型检查。是什么让它太容易出错。对于您的情况来说,这也不是很有帮助。