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

时间:2014-11-27 01:31:38

标签: c++ class struct static-methods

在库的.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的指针。

我有什么技巧可以做出前瞻性声明所以我称之为这种方法吗?

1 个答案:

答案 0 :(得分:2)

简短的回答是:“不。”

该库的提供者使Nasty::DesiredStruct不透明。也就是说,该结构的完整声明和定义完全包含在源文件中,并且不能从头文件中获得。这样做的目的是不让你做你想做的事。

您唯一的选择是:

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

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