【问题标题】:C++ type traits to check if class has operator/member [duplicate]C ++类型特征以检查类是否具有运算符/成员[重复]
【发布时间】:2011-01-08 12:03:55
【问题描述】:

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

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

【问题讨论】:

    标签: c++ class templates typetraits


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2017-01-13
    • 2017-08-17
    • 2022-12-12
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多