【发布时间】:2012-06-29 23:53:47
【问题描述】:
有没有办法要求模板类型具有属性?
例如:
template <typename T, typename U>
void foo()
{
U a,b;
bool truthiness = T()(a,b);
if (truthiness)
// do something
}
那么,我如何要求 T 定义 operator()(U a, U b) 并返回特定类型?这可能吗? (我知道它在 d 中,但我不确定 c++)。
ps。如果此处的鸭子打字有误,请告诉我,我相信它是正确的,但我不确定。
【问题讨论】:
-
问题是,如果它没有有那个操作符,你想发生什么?抛开语法错误不谈,你会得到一个编译器错误——你还想要什么?
-
这(部分)是
concepts 应该提供的——一种直接指定对可以实例化模板的类型的要求的方法。不幸的是,尽管做了很多工作,它并没有成为标准。 -
查找 SFINAE,这是一种专门为此目的而设计的技术。
-
如果你想要的是类型
T来实现operator()(int,int),语法错误,因为operator()必须应用于类型的实例,而不是类型本身(即@ 987654328@) -
@MooingDuck:谢谢!这正是我感兴趣的。我还修复了错误,并使其更普遍。
标签: c++ templates duck-typing