功能模板规范
我想创建一个函数模板,其中类 T 仅限于特殊基类 T_base 的派生类。实现这一目标的有效方法是什么?感谢您的帮助!
I would like to create a function template where the class T is limited to only derived classes of a special base class T_base. What is the efficient way to accomplish this? Thanks for your help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用类型特征和 SFINAE
C++03 版本,该版本也适用于 C++11
有一个 C++11 版本将
enable_if
移动到模板参数列表中,使用默认参数遗憾的是如果其他重载的唯一区别是 SFINAE 字符串(即默认参数),则您不能重载
f
,因为默认参数不是函数模板签名的一部分。但模板参数本身的类型是(这些规则就像普通函数参数一样)。You can use type traits and SFINAE
C++03 version that also works for C++11
There is the C++11 version of moving the
enable_if
into the template parameter list, using a default argumentSadly you then cannot overload
f
if the only difference of your other overload is the SFINAE string (i.e the default argument), because the default argument is not part of the signature of a function template. But the type of the template parameters themselfs are (these rules are just like for normal function parameters).C++0x 有
std::enable_if
;如果您的编译器尚不支持,可以使用boost::enable_if
。例如,如果签名是
templateint f(T&)
,您可以使用C++0x has
std::enable_if
; if your compiler doesn't yet support it, there'sboost::enable_if
.For example if the signature would be
template<typename T> int f(T&)
, you'd use我能想到的最简单的方法是这样的:
The simplest way I can think of would be something like this: