1

IPP 是一个 C 库,具有数百个这样的函数:

IppStatus ippiTranspose_8u_C1R(const Ipp8u* pSrc, int srcStep,
                               Ipp8u* pDst, int dstStep,
                               IppiSize roiSize));

为了能够以更方便、安全和一致的方式调用这些函数,我们需要为每个 C 函数提供一个 C++ 包装函数。例如:

void ippiTranspose(const Image<Ipp8u> &src, Rect srcRect, Image<Ipp8u> &dst, Point dstPos)
{
  if (!src.valid()) throw "Invalid src";
  if (!dst.valid()) throw "Invalid dst";
  Rect srcRoi = srcRect.isEmpty() ? src.rect() : srcRect;
  if (!src.rect().contains(srcRoi)) throw "Invalid src rect";
  Rect dstRoi = Rect(dstPos, srcRoi.size());
  if (!dst.rect().contains(dstRoi)) throw "Invalid dst rect";
  IppStatus st = ippiTranspose_8u_C1R(&src.at(srcRoi.topLeft()), src.step(), &dst.at(dstRoi.topLeft()), dst.step(), toIppiSize(srcRoi.size());
  if (st < 0) throw "ippiTranspose_8u_C1R failed";
}

有逻辑模式,可以应用于 IPP 中的所有功能。

如何自动生成所有这些包装器?

4

3 回答 3

2

英特尔提供了某种包装器,它们很好地隐藏在仅适用于 Windows 的 ipp-samples 中。我正在使用最新的 7.0 beta 版本。它们提供由 perl 脚本生成的 C++ 头文件,它们应该用作 C++ 包装器。问题中 ippiTranspose_8u_C1R 函数的“包装器”是这样的:

 static inline IppStatus ippiTranspose_C1R( const Ipp8u* pSrc, int srcStep, Ipp8u* pDst, int dstStep, IppiSize roiSize) {
   return ippiTranspose_8u_C1R( pSrc, srcStep, pDst, dstStep, roiSize );
 }

This is just a shorter version of the function call.

What I expect from a good C++ wrapper for a C function:

  • map C-like params to C++ (objects, templates)
  • check if the input params are valid
  • check if the result is a success, error or warning
  • error handling using exceptions

We need a real solution for the C++ world, Intel!

I am currently working on a program, which automatically generates wrappers like the example in the question, and the things look nice.

Thanks to Ross for pointing the solution from Intel.

于 2010-08-26T06:50:19.313 回答
2

Better late than never. IPP 2017 has an extension package with full-blown C++ API. The preview had small functionality coverage, but it may have been extend for the gold release. https://software.intel.com/en-us/articles/intel-ipp-integration-wrappers

于 2016-04-25T14:34:44.767 回答
0

查看“语言”示例部分中有 ippi.hpp 文件的示例。它是 C++ 包装器。

于 2010-08-25T09:28:17.710 回答