VTK/VTK6 迁移/“工厂化”需要的定义

有时候会出现这种情况:“我的程序编译过了,链接也O了,但是New()缺返回了NULL”。


标准C++, New失败会抛出bad_alloc异常,但是有些编译器对C++支持不是很好,New失败可能不会抛出异常,而是返回0。较好的编程习惯为:

// 这样如果 new 失败了,就不会抛出异常,而是返回空指针
int* p = new (std::nothrow) int;
if ( NULL == p )
    return -1;


VTK项目用CMake生成时,会使用标准的find_package(VTK)和include(${VTK_USE_FILE}),程序运行的时候也不会出错,(这些命令会自动给程序中添加定义 - 宏命令)。如果项目的新建不是使用CMake,需要结合模块实现指南

工厂方法要求在VTK配置时自动添加相关的模块。在不使用CMake生成解决方案时,为了使用不同的模块,需要定义一些宏。


2013年9月10号,不知谁还是哪里?估计是官方发布了一下宏命令,这个新的宏命令可以简化上面这个程序,应用中的一个源程序需要添加下面一段代码(用这个,所有的模块都应该会被初始化)

#include <vtkAutoInit.h>
 VTK_MODULE_INIT(vtkRenderingOpenGL);

这个片段代码会初始化vtkRenderingOpenGL这个对象工厂,其他的模块应该也是的。如果是VTK之前的版本(6.0或者是这个时间之前的版本),你可以在所有VTK头文件之前添加下面一段代码:

#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)



其他的一些参考链接:


遇到NULL指针时,可以让程序不编译,直接跳出来。这一步需要做一些选择(在window中,Visual studio 2008 V9 中项目右键菜单中: 属性页-->预定义)【这段不知道对错,下面的不翻译了没有意义】



PLUS: 还没有找到win7 x64 + VTK 7.0.0中需要用到的相关宏



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值