我意识到,在开发 C++ 库时,有时在.h
与库关联的文件中包含实现代码是不可避免的。例如template
,在开发方法的等时class
。
我已经理解了,template
某物的 会将该物所代表的内容从其自身的具体实现转换为编译器在创建template
某物用法背后的具体实现时要遵循的指令。在库开发的背景下,这告诉我,将方法template
、class
等的实现代码从声明 的文件中移出template
是不可能的,否则链接库的人将没有编译 用法背后的具体实现所需的指令template
(除其他原因外,不能将 的实现代码放在template
与 声明 不同的文件中template
)。
具体考虑上述示例,如果.h
库附带的一个或多个文件与库本身的内容不完全匹配,那么对链接库的人来说会有什么后果?
我已经接受了这样一个事实:如果不在声明这些 s 的文件template
中包括完整的实现代码,我就无法将这些 s 提供给那些链接库的人,因为否则就没有意义了。我还应该补充一点,在我想要实现的更大范围内,我无法具体实现这个例子中 s 的所有变体,因为我希望库的链接器能够具体实现他们自己对这些s 的变体。也就是说,我只想知道如果链接库的人试图篡改文件会发生什么。编译会失败吗?链接会失败吗?构建会成功吗?只是会产生大量的运行时错误?我会在 MRE 中测试自己,但是我对库开发没有足够的信心,不知道 MRE 的任何结果是否是我自己无能的结果。.h
template
template
template
.h
感谢阅读!
它可能会以无法预见的方式崩溃。是的,这包括您删除所有用户的文件。
如果 ABI 中的唯一区别在于您未使用的符号之间,它可能会起作用。
它甚至可能不会生成可链接的代码,因此您甚至可能无法生成二进制文件。
所以,这得看情况。