java - 如何将类的目标文件与源文件链接

标签 java c++ mingw32

我想知道是否可以在不包含类源文件的情况下使用类的目标文件链接和编译源代码文件。

或者

就像在 Java 中一样,我可以在不提供源代码的情况下将编译后的 *.class 文件和该类的文档提供给 friend ,并且他可以在不知道真正源代码的情况下根据需要包含该类。

我可以用 C++ 做同样的事情吗?以及如何?

仅供引用:我正在使用 MinGW。

我是新手,所以这可能看起来像一个愚蠢的问题(但仍然没有愚蠢的问题)。

最佳答案

在 C++ 中,您可以只生成一个可执行文件(在 Windows 中为 .exe,在 Linux 中通常没有扩展名)或一个库文件(.lib 或 .a)或一个共享库(.dll 或 .so),具体取决于您使用的是什么想要实现。

如果您要提供一个库,您还必须提供一个带有类声明的头文件。如果你不想透露太多细节,你可以有一个“实现”类,它只是一个指向头文件中实现的指针,真正的实现只对你作为类的所有者可用来源。

有关更多信息,您应该按照 Thomas Matthews 的建议查找“PIMPL”——它是“Pointer to IMPLementation class”的缩写。基本上,您的“公共(public)”类只是一个提供您希望其他人看到的功能的外壳,它内部的实现类完成了所有艰苦的工作。

简单的例子

在你的头文件中:

// Forward declaration of the implementation class. 
class double_it_impl;

// Class that stores an integer, and doubles it each time you 
// call doubling().
class Public_double_it
{
  public:
    public_double_it(int x);    // COnstructor. 

    int doubling();        // Function d

  private:
     double_it_impl *pImpl;
};

在您的源文件或私有(private)头文件中,我们声明实际的实现:

class double_it_impl
{
  public:
    double_it_impl(int x) : m_x = x; {};
    int doubling()  { m_x *= 2; return m_x; }

}


public_double_it::public_double_it(int x)
{
    pImpl = new public_double_it(x);
}

int public_double_it::doubling()
{
   return pImpl->doubling();
}

现在你看不到实现类包含什么或者它是如何工作的——当然,这是一个非常微不足道的例子,但我希望它传达了这个想法。

关于java - 如何将类的目标文件与源文件链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307165/

相关文章:

C++ if 语句在 block 之外返回

c++ - 编译基于sCrypt的加密货币QT客户端时,抛出常见错误

c++ - 如何使用 Mingw 或 Cygwin 编译和构建一个非常简单的 Gnu linux 应用程序到 Windows?

java - 从/向路径读取和写入 CSV

java - 详细的 Java GC 日志

java - 使用 AutoCompleteDecorator 自动完成和编辑 JTextField

c++ - 初始化数组之间的区别

java - getColor 方法上的资源未找到异常

c++ - 将引用分配给引用是有效操作吗?

mingw - 如何在 Linux 或 MacOS 上同时安装 mingw32 和 mingw64?