可能重复:
Is it possible to write a C++ template to check for a function's existence?
是否可以使用boost类型特征或某些其他机制来检查特定模板参数是否具有运算符/函数,例如std::vector
作为模板参数有operator[]
,而std::pair
没有。{/ p>
答案 0 :(得分:15)
你无法通过类型特征来解决这个问题,因为你必须为每个可能的名称定义。
Here是列出的常见解决方案,但有一个问题:许多STL实现将公共代码放在基类中,并且此方法不检查继承的名称。
如果您还需要检查继承的成员,请参阅here。答案提供了一个解决方案,可以检查相关类是否具有该名称的成员,还可以检查const-ness和参数计数。然而,它无法检查包括参数和返回类型的完整签名,并且成员可见性没有区别。你应该能够通过使用链接的is_call_possible<>
来解决这个问题(还没有时间看过它)。