C ++类型特征,用于检查类是否具有运算符/成员

时间:2010-01-23 06:05:23

标签: c++ class templates typetraits

  

可能重复:
  Is it possible to write a C++ template to check for a function's existence?

是否可以使用boost类型特征或某些其他机制来检查特定模板参数是否具有运算符/函数,例如std::vector作为模板参数有operator[],而std::pair没有。{/ p>

1 个答案:

答案 0 :(得分:15)

你无法通过类型特征来解决这个问题,因为你必须为每个可能的名称定义。

Here是列出的常见解决方案,但有一个问题:许多STL实现将公共代码放在基类中,并且此方法不检查继承的名称。

如果您还需要检查继承的成员,请参阅here。答案提供了一个解决方案,可以检查相关类是否具有该名称的成员,还可以检查const-ness和参数计数。然而,它无法检查包括参数和返回类型的完整签名,并且成员可见性没有区别。你应该能够通过使用链接的is_call_possible<>来解决这个问题(还没有时间看过它)。