在库的.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的指针。
我有什么技巧可以做出前瞻性声明所以我称之为这种方法吗?
答案 0 :(得分:2)
简短的回答是:“不。”
该库的提供者使Nasty::DesiredStruct
不透明。也就是说,该结构的完整声明和定义完全包含在源文件中,并且不能从头文件中获得。这样做的目的是不让你做你想做的事。
您唯一的选择是:
请勿尝试将方法实现复制到您控制的文件中。