针对某个继承体系的特化,能做到么

Aniao 2010-10-02 05:04:36
我想写一个模板函数或者类,其中需要对某个继承体系的进行特化。


简单来说就好像针对stl里的bidirection或者randomaccess的迭代器进行特化一样。


除了像STL那样用复杂的trait来做之外,有没有其他的方案?



需求是比如有一个类叫摄像头webcam,而以后可能会出现其继承者数码摄像头,光子摄像头,电子摄像头,春哥摄像头,而我的泛型类需要对这个继承体系进行特化好利用里面的capture方法,而不是利用运行时的判断,以提高性能


说白了就是要实现类似于java里运行时仿模板的
template <T implements webcam>这样的功能,我才能在用的时候只要方便地A<春哥摄像头> webcamChun()来初始化对象调用类A的webcam特化版本。


在C++里该怎么写,是否有这样的语法:

...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Aniao 2010-10-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yshuise 的回复:]

C/C++ code
#include "stdafx.h"
#include <iostream>

struct webcam{

};
struct 数码摄像头: webcam{

};

struct 光子摄像头: webcam{

};

template <typename T>
class execute{
public:

};

template<>
class execut……
[/Quote]




………………这,这种不行吧,如果我以后再加其他子类,岂不是还得重新在头文件里添加相应的特化。
科技完美生活 2010-10-02
  • 打赏
  • 举报
回复
离开这一行没多久,有些词都不知道什么意思了
gules 2010-10-02
  • 打赏
  • 举报
回复
从LZ的需求看,动态多态和静态多态都可以直接满足要求,为什么偏要强求某种语言特性呢(是不是有点过度设计了)?
yshuise 2010-10-02
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <iostream>

struct webcam{

};
struct 数码摄像头: webcam{

};

struct 光子摄像头: webcam{

};

template <typename T>
class execute{
public:

};

template<>
class execute<数码摄像头>
{
public :
static void fun(){ std::cout<<"数码"<<std::endl; }
};

template<>
class execute<光子摄像头>
{
public:
static void fun(){ std::cout<<"光子"<<std::endl; }
};

int _tmain(int argc, _TCHAR* argv[])
{
execute<光子摄像头>::fun();
return 0;
}
ayw215 2010-10-02
  • 打赏
  • 举报
回复
1,不懂Java,没看到lz的举例
2,模板也可以特化

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧