VTK/VTK6 迁移/“工厂化”需要的定义
2016-07-22 16:28
260 查看
有时候会出现这种情况:“我的程序编译过了,链接也O了,但是New()缺返回了NULL”。
标准C++, New失败会抛出bad_alloc异常,但是有些编译器对C++支持不是很好,New失败可能不会抛出异常,而是返回0。较好的编程习惯为:
VTK项目用CMake生成时,会使用标准的find_package(VTK)和include(${VTK_USE_FILE}),程序运行的时候也不会出错,(这些命令会自动给程序中添加定义 - 宏命令)。如果项目的新建不是使用CMake,需要结合模块实现指南。
工厂方法要求在VTK配置时自动添加相关的模块。在不使用CMake生成解决方案时,为了使用不同的模块,需要定义一些宏。
2013年9月10号,(不知谁还是哪里?估计是官方)发布了一下宏命令,这个新的宏命令可以简化上面这个程序,应用中的一个源程序需要添加下面一段代码(用这个,所有的模块都应该会被初始化)
这个片段代码会初始化vtkRenderingOpenGL这个对象工厂,其他的模块应该也是的。如果是VTK之前的版本(6.0或者是这个时间之前的版本),你可以在所有VTK头文件之前添加下面一段代码:
#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)
其他的一些参考链接:
http://www.vtk.org/pipermail/vtkusers/2013-April/128255.html (已经无效了)
https://github.com/Kitware/VTK/commit/9385718b82e6af83b7e7dcc90a937419edc6892b
http://www.vtk.org/pipermail/vtkusers/2013-March/127811.html
遇到NULL指针时,可以让程序不编译,直接跳出来。这一步需要做一些选择(在window中,Visual studio 2008 V9 中项目右键菜单中: 属性页-->预定义)【这段不知道对错,下面的不翻译了没有意义】
PLUS: 还没有找到win7 x64 + VTK 7.0.0中需要用到的相关宏
标准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)
其他的一些参考链接:
http://www.vtk.org/pipermail/vtkusers/2013-April/128255.html (已经无效了)
https://github.com/Kitware/VTK/commit/9385718b82e6af83b7e7dcc90a937419edc6892b
http://www.vtk.org/pipermail/vtkusers/2013-March/127811.html
遇到NULL指针时,可以让程序不编译,直接跳出来。这一步需要做一些选择(在window中,Visual studio 2008 V9 中项目右键菜单中: 属性页-->预定义)【这段不知道对错,下面的不翻译了没有意义】
PLUS: 还没有找到win7 x64 + VTK 7.0.0中需要用到的相关宏
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- 5 个适合系统管理员使用的告警可视化工具
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析