8

可能重复:
是否可以编写 C++ 模板来检查函数是否存在?

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

4

1 回答 1

15

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

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

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

于 2010-01-23T06:14:26.297 回答