求教!如何建立数字与类型之间的映射关系?如何根据模板推导出基本类型?

Sherwei 2017-05-14 12:14:55
问题1:如果我想根据模板类型推导出其基本类型,要怎么做啊?



template<typename T>
class C
{
private:
T member;
};

C<int> c1; //普通用法
C<const int*> c2; //怎么根据 const int* 推导出基本类型 int ,使得 member 仍然是 int 型呢?



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

问题2:如果我想建立一种映射关系,那该怎么用?比如这样:



template<size_t I>
class C
{
private:
??? member;
};

C<0> c1;
C<1> c2;



//就是比如说:如果I是0,那么member就是int型;如果I是1,member就是double型...等等
//这样该怎么写啊?用map? 还是typeid什么的...
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
千树之影 2017-05-16
  • 打赏
  • 举报
回复
没太看懂楼主的意思,不知道是不是和下面的用法类似:
#define DATA_8U			2 
#define DATA_8S			3
#define DATA_16U		4
#define DATA_16S		5
#define DATA_32S		8
#define DATA_32F		9
#define DATA_64F		16
template<typename _Tp> class DataType {};  // template type derivation
template<> class DataType<uchar>	{ public: enum { value = DATA_8U	 }; };
template<> class DataType<char>		{ public: enum { value = DATA_8S	 }; };
template<> class DataType<ushort>	{ public: enum { value = DATA_16U	 }; };
template<> class DataType<short>	{ public: enum { value = DATA_16S    }; };
template<> class DataType<int>		{ public: enum { value = DATA_32S    }; };
template<> class DataType<float>	{ public: enum { value = DATA_32F    }; };
template<> class DataType<double>	{ public: enum { value = DATA_64F    }; };
对于模板中一个未知类型T,可以用DataType<T>::value获取一个整数值,表示T的实际类型。
Sherwei 2017-05-16
  • 打赏
  • 举报
回复
太好了!!!有点启发了,谢谢谢谢!!!
Sherwei 2017-05-14
  • 打赏
  • 举报
回复
好吧,我去找找有什么更好的方法...
paschen 版主 2017-05-14
  • 打赏
  • 举报
回复
搜索:类模板的全特化与偏特化

64,677

社区成员

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

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