3

我热衷于使用 boost 的 object_pool 类对一组视频帧进行内存重用。

boost::object_pool< VideoFrame > FramePool;

现在,VideoFrame 类有两个构造函数。构造函数的第一个版本需要 4 个参数,而第二个版本需要 6 个参数/参数。

对于分配的每个“新”视频帧,我想使用 4 或 6 参数版本调用对象的构造函数。例如:

//VideoFrame *F = new VideoFrame(IdeckLinkOutput, &R, PixelFormat, FrameFlags);
VideoFrame *F = FramePool.construct(IdeckLinkOutput, &R, PixelFormat, FrameFlags);

在 MSVS 2005 上构建它,我收到错误:

error C2660: 'boost::object_pool<T>::construct' : function does not take 4 arguments

根据object_pool的'construct'方法的文档,“ElementType必须有一个构造函数匹配???;给定的参数数量不能超过pool_construct支持的数量”

我已经看到了pool_construct的 boost 页面,但我不太确定我需要采取的方向。我在我的机器上构建的 boost 有 pool_construct.m4、pool_construct.sh、pool_construct.bat、pool_construct.inc。这是一个问题,我如何在我自己的项目中处理这些示例文件?我会创建自己的 pool_construct.inc 变体并将其包含在我自己的项目中吗?我将如何添加文件?

任何提示/建议将不胜感激。请注意,我已经安装了 gnu 的 m4。

零缺陷。

4

1 回答 1

3

如果我在/usr/include/boost/pool/detail/pool_construct.inc我的 Debian 机器上查看(抱歉目前无法访问 MSVC),我发现它最多只支持 3 个构造函数参数。

与简单地创建一个将足够多的参数捆绑在一个结构中的新构造函数或将传递的总数降低到支持的数量相比,根据文档使用 m4来支持超过支持的 3 听起来像是一种痛苦。boost::tuple

于 2010-04-09T20:55:34.553 回答