C++ 在模块之间传递成员函数指针

C++ 在模块之间传递成员函数指针,c++,C++,只是个好奇的问题!似乎表明成员函数指针实际上是不同大小的待定编译器和使用的编译选项,似乎表明函数指针在模块之间的传递很好,那么成员函数指针呢?我的意思是,在模块之间传递数据时已经出现了很多麻烦,即使尝试这样做也会显得相当愚蠢?或者关于涉及静态库的场景呢?如果使用两个不同的编译器,我是否错误地认为任何涉及传递成员函数指针的场景都是徒劳的?成员函数指针与函数指针完全不同。它们不仅必须编码指向成员函数的函数指针,还必须编码成员函数的正确类型,以便运行时知道如何调用成员函数。这在很大程度上取决于编译器实

只是个好奇的问题!似乎表明成员函数指针实际上是不同大小的待定编译器和使用的编译选项,似乎表明函数指针在模块之间的传递很好,那么成员函数指针呢?我的意思是,在模块之间传递数据时已经出现了很多麻烦,即使尝试这样做也会显得相当愚蠢?或者关于涉及静态库的场景呢?如果使用两个不同的编译器,我是否错误地认为任何涉及传递成员函数指针的场景都是徒劳的?

成员函数指针与函数指针完全不同。它们不仅必须编码指向成员函数的函数指针,还必须编码成员函数的正确类型,以便运行时知道如何调用成员函数。这在很大程度上取决于编译器实现类的方式,而且编译器供应商之间的实现肯定会发生变化,并且编译器内部的实现通常会根据调用编译器的方式发生变化

如果您使用两个不同的编译器,那么除非它们具有兼容的ABI(应用程序二进制接口),否则您无法合理地混合和匹配它们创建的任何目标代码,无论是否涉及成员函数指针。

谢谢!我没有意识到编译器不兼容的程度。我想这是我应该问的问题。嗨,TMG。FYI,它们不一定编码正确的类型,而是(在MS C++的情况下)偏移计算,将对象调用的地址点映射到被调用方的地址点,以及调用哪个虚拟或非虚函数。对于指向具有虚拟继承的类的成员函数的指针,这可能需要一个跨越多个内存字的PMF。@Jan:虽然不是表示类型的标记或指针,但所有这些信息都与PMF所使用的类型有关;值得注意的是,这在很大程度上取决于特定编译器如何实现用户类型的机制。