无法专门化来自其他命名空间的模板

时间:2013-02-28 19:20:32

标签: c++ templates opencv

我已经从opencv中分出来了,当我尝试修改一段专门化的模板化代码时,在我的命名空间中,我收到了错误:

make -k 

[100%] Building CXX object object_detection.cpp.o
In file included from object_detection.cpp:1:0:
object_detection.h:370:75: error: specialization of 'void cv::Ptr<_Tp>::delete_obj() [with _Tp = CvHaarClassifierCascade]' in different namespace [-fpermissive]
object_detection.h:370:30: error:   from definition of 'void cv::Ptr<_Tp>::delete_obj() [with _Tp = CvHaarClassifierCascade]' [-fpermissive]

据我所知,我不应该在不同的命名空间中专门化模板代码,但还有出路吗?

1 个答案:

答案 0 :(得分:0)

  1. 重新打开他们的名称空间,并专注于它。
  2. 对于函数,如果通过ADL忠实使用它,请在参数的命名空间中创建覆盖。
  3. 检查源模板是否使用了traits类或其他类似的技术,您可以拦截它们。