【发布时间】:2013-08-09 03:17:48
【问题描述】:
我有一个泛型类,我想在编译时只限制浮点类型的实例。如下例所示:
template <typename T>
class ClassName
{
// instance variables, etc..
void some_method()
{
// do stuff, but only for floating point types
}
}
如何让编译器拒绝对非浮点类型的 ClassName 使用 some_method?
我一直在研究 SFINAE,但我根本无法让它发挥作用,所以在失败了几个小时后,我请求您的帮助。
谢谢:)
【问题讨论】:
-
你试过什么?您可能可以将
std::is_floating_point和std::enable_if放在一起。 -
目前我正在将函数包装在另一个函数中,如下所示:
void some_other_method() { some_method(std::is_floating_point<T>()); }void some_method() { }这可行,但我想要一个不必包装函数的解决方案。 -
@juanchopanza 如果您将
some_method设为模板,则可以使您的示例工作。我正在寻找一个先前的答案来解释这里所涉及的机制。 -
模板专业化也是实现这一目标的有效技术。
-
@R.MartinhoFernandes 我修复了我的示例,但与此同时,其他人似乎也找到了相同的解决方案。
标签: c++ c++11 traits typetraits