如何强制转换模版类型

yozola 2013-05-01 01:48:05

template<typename T>
void func(T t)
{
const unsigned X = (unsigned T)(-1);
}


我想让 X 的值根据模板类型 T 的长度来确定,若是 1 个字节长度,则是 255 ,若是 2 个字节长度,则是 65535 , 4 个字节则是 42 亿,但是上面的代码在 MinGW 编译时语法错误,应该怎样写呢?

另外该函数的模板类型 T 正常只能使用整型实参,可以是有符号整型或是无符号整型,只是在函数内引用时必须强制转换为无符号类型。
...全文
387 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2013-05-01
  • 打赏
  • 举报
回复
引用 4 楼 yozola 的回复:
用 switch 有运行时的消耗,而且若我想把 X 定义为栈数组的维数的话就不行了,因为不是编译期常量
引用 1 楼 qq120848369 的回复:
貌似这种问题一个switch (sizeof(t))就可以解决了.
那只能一个类型一个类型的特化了.
turing-complete 2013-05-01
  • 打赏
  • 举报
回复
楼主现在要做的事情,标准库已经做过了,可以直接使用。 请参考此链接
yozola 2013-05-01
  • 打赏
  • 举报
回复
用 switch 有运行时的消耗,而且若我想把 X 定义为栈数组的维数的话就不行了,因为不是编译期常量
引用 1 楼 qq120848369 的回复:
貌似这种问题一个switch (sizeof(t))就可以解决了.
cqdjyy01234 2013-05-01
  • 打赏
  • 举报
回复
c++11可以使用make_unsigned 否则,可以自己定义: template<class T> struct make_unsigned{}; template<> struct make_unsigned<int>{typedef unsigned int type}; template<> struct make_unsigned<long>{typedef unsigned long type}; template<> struct make_unsigned<short>{typedef unsigned short type}; 然后就可以这样用: template<typename T> void func(T t){ const make_unsigned<T>::type X = T(-1); }
Athenacle_ 2013-05-01
  • 打赏
  • 举报
回复
可以用下climit
qq120848369 2013-05-01
  • 打赏
  • 举报
回复
貌似这种问题一个switch (sizeof(t))就可以解决了.

65,187

社区成员

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

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