繁体   English   中英

我可以在没有任何前向声明的类/结构上访问静态成员函数吗?

[英]Can I access a static member function on a class/struct which I don't have any forward declaration?

库的.cpp文件中声明了一个结构,我想在此结构上调用静态成员函数。 我无法控制这个图书馆。 除了( DesiredStruct )之外,没有其他向前声明。

nasty.hpp (header for library):

//nasty's forward declaration
class Nasty {
    struct DesiredStruct;
    DesiredStruct  *mDesiredStruct;

    ...
}

编写我自己的完整前向声明是不可行的,因为类型上的#ifdef太多,而且定义中很难正确。

nasty.cpp: (code in the library I have no control over)

struct Nasty::DesiredStruct {
  ... 
  public:
  static void desired_member() { ... }
}

我想打电话给Nasty::DesiredStruct::desired_member(); 但是编译器不会在没有前向声明的情况下放任我,而且我做出前向声明的任何尝试都失败了。

我不知道这是否重要,因为desired_member是静态的,但是我可以使用指向Nasty的指针。

我可以做任何技巧来进行前向声明,所以我调用此方法吗?

最简洁的答案是不。”

该库的提供程序已使Nasty::DesiredStruct不透明。 也就是说,该结构的完整声明和定义完全包含在源文件中,而无法从头文件中获得。 这样做的明确目的是不允许您去做您想做的事情。

您唯一的选择是:

  • 重新设计解决方案,以使您不再需要调用该方法(无论如何您都无法使用该方法); 要么,
  • 说服库实现者以某种方式(也许使用新的API)公开该方法。

不要尝试将方法实现复制到您控制的文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM