请教一个模版参数的问题

ykzhujiang 2007-01-06 11:48:15
比如我想传递类型T,以及这个类型的参数给一个类,那么应该怎样写呢?
template<class T,T var>
class Foo{...};
这样写是不是不对,为什么用int来实例化这个模版的时候可以编译通过,而用其他类型的
时候不行?
谢谢大家,bow~
...全文
246 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
foochow 2007-01-07
  • 打赏
  • 举报
回复
这样写是没错的,非类型参数的类型有如下限制(C++标准14.3.2)

— an integral constantexpression of integral or enumeration type; or
— the name of a nontype templateparameter;or
— the name of an object or function with external linkage,
— the address of an object or function with external linkage,
— a pointer to member expressed
weixing979 2007-01-07
  • 打赏
  • 举报
回复
template<class T,T var>
class Foo
{
public:
void Printout()
{
cout << var << endl;
return;
}
};

调用
Foo<int,5> foo;
foo.Printout();
可以使用
用Foo<char,5> foo;编译是可以通过的
jixingzhong 2007-01-07
  • 打赏
  • 举报
回复
为何如此规定倒是不曾细想 ~~
ykzhujiang 2007-01-07
  • 打赏
  • 举报
回复
恩,谢谢楼上的兄弟,我也是搜到这个结果,对于这种我觉得不是很方便呀,不晓得为什么要这样规定呢
foochow 2007-01-07
  • 打赏
  • 举报
回复
下面是C++TEMPLATE上的内容,LZ可以参考下

Nontype template arguments 是針對nontype template parameters 而指定的「值」,它必須符合㆘列條件之㆒:
􀁺 是㆒個具有正確型別的nontype template parameter。
􀁺 是㆒個編譯期整數型(integer)或列舉型(enum)常數,但必須與對應的參數型別匹配,或
者可以被隱式轉型為該型別(例如int 參數可以使用char 值)。
􀁺 以內建㆒元取址運算子(unary addressof operator&)為前導的外部變數或函式。面對函式或array 變數,可省略不寫 '&'。這㆒類template arguments 匹配pointer type nontype parameter。
􀁺 如上所述但無前導 '&'。匹配的是reference type nontype parameter。
􀁺 ㆒個pointer-to-member 常數;亦即形如 &C::m 的運算式,其㆗C是個class type,m是個non-static
成員(函式或變數)。它只匹配pointer-to-member type nontype parameters。

65,187

社区成员

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

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