了解DLL类中的c++语法
Understanding C++ syntax in a DLL class
我试着去理解一些代码,这些代码可以总结成这样:
class FooClass {
public:
void Foo();
static void (FooClass::*Foo_Original)();
};
void (FooClass::* FooClass::Foo_Original)() = 0;
void FooClass::Foo() {
(this->*Foo_Original)();
}
这是Visual Studio中更复杂的dll解决方案的一部分。从调试器中,我发现方法Foo()
是从其他一些dll调用的。有人能解释一下这个语法是什么意思吗?它应该做什么?
这个和这个不重复。指向类数据成员的指针
FooClass
公开了成员函数Foo()
和指向成员函数的静态指针。这个指针叫做Foo_Original
。
因为是静态指针,所以必须初始化,这里用0(也就是nullptr)。
函数Foo()
只调用Foo_Original
所指向的函数。当然,只有当指针在某个地方初始化为成员函数时,这才会像U.B一样做其他事情。
的例子:
class FooClass {
public:
void Foo();
static void (FooClass::*Foo_Original)();
// additional member functions for the demo:
void Bar() { std::cout << "Bar was called" << std::endl; }
void Goo() { std::cout << "Goo was called" << std::endl; }
};
int main()
{
FooClass f;
// f.Foo(); ==> U.B, as Foo_Original is still 0
f.Foo_Original = &FooClass::Bar;
f.Foo();
f.Foo_Original = &FooClass::Goo;
f.Foo();
}
注::我不知道这与dll和dll注入有什么关系,但我可以想象你的FooClass动态加载一些dll,并为它们提供一个标准化的接口。
我不太使用它们,但这看起来像是声明了一个ptr-to-a-FooClass-member-function,它接受零参数并'返回' void。我不确定它是声明了一个静态指针,还是一个指向静态成员函数的指针。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么