覆盖专用模板
Override specialized template
我一直在使用Boost.GIL来执行一些基本的图像处理例程。在 Boost.GIL 中,不同类型的像素之间的色彩空间转换是通过通用convert_pixel( )
函数的模板专用化来实现的。但是,例如,我很想用基于 LCMS 的东西来覆盖这些实现。
有没有办法覆盖模板的专用化,以便对convert_pixel()
的任何内部调用都将使用新的基于 LCMS 的convert_pixel()
?
最后的阿斯维尔
深入研究 GIL 设计手册(比教程有趣得多),我发现了 Adobe 如何建议解决这个问题。对于我们感兴趣的人,此链接提供了答案:http://www.boost.org/doc/libs/1_49_0/libs/gil/doc/html/gildesignguide.html#NewColorConversionDG
熟悉 GIL,我在文档中只找到了一个类似的函数。但是,可能不需要回答该问题。
劫持原始调用,您应该能够覆盖转换。函数优先级应该来拯救这一天:普通函数总是比模板函数更受欢迎。假设原始模板专用化为
template<>
GIL_FORCEINLINE void boost::gil::copy_and_convert_pixels (const V1 &src, const V2 &dst, CC cc) { original_code; }
您可以覆盖此定义自定义非模板函数
GIL_FORCEINLINE void boost::gil::copy_and_convert_pixels (const V1 &src, const V2 &dst, CC cc) { overridden_code; }
应特别注意将函数定义为具有相同名称的同一命名空间,并在进行第一次调用之前将其包含在内。
FWIW,请参阅此答案以获取覆盖boost::gil::color_convert
的示例,以便使用 GIL 尚未提供的转换扩展boost::gil::copy_and_convert_pixels
行为。
我认为尝试替换 GIL color_convert.hpp
中定义的现有转换时会遇到问题;您可能想要/需要走的路线是定义一个新的颜色基 c.f rgb_t、cmyk_t(例如lcms_t?),然后定义诸如default_color_converter_impl<rgb_t,lcms_t>
之类的东西来与之互操作。
- .cpp和.h文件中的模板专用化声明
- 调用专用模板时出错"no matching function for call to [...]"
- 模板专用化(按容器):value_type
- 使用ios:ate写入到流会覆盖现有文件
- 我可以重新分配/覆盖std::字符串吗
- 叮叮当当在修复时插入多个"覆盖"说明符
- 谷歌模拟和覆盖关键字
- 静态数据成员模板专用化的实例化点在哪里
- 特征 3 类的模板专用化
- Visual Studio 2017 不允许我创建 C++ 专用模板
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 具有常量引用参数的函数模板专用化
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 使用其他模板的模板专用化
- 使用子类覆盖基类中定义的函数
- 使用专用显卡进行 OpenGL 渲染时帧速率较低
- 当覆盖存在时调用基本虚拟"binded to object"函数
- 嵌套模板显式专用化
- 覆盖专用模板