我知道标准C++中没有任何功能,除了你已经提到的静态,它需要一个库来定义一个完整的翻译单元(而不是只有标题).但是,建议不要这样做,因为当您这样做时,您会强制所有客户端在库更改时重新编译整个代码库.如果您正在使用源文件或静态库或动态库形式的分发,则可以更改/更新/修改您的库,而无需强制每个人重新编译.
我会说,有可能在不使用许多语言功能的明确条件下:正如您所注意到的,static关键字的一些用法.
它可能需要一些技巧,但可以审查它们.
()).请注意,在C++ 0x中,这成为一种受欢迎的方式,因为它保证是线程安全的,同时仍然保护初始化顺序惨败,直到那时......它不是线程安全的;)尊重这3点,我相信你能够编写一个完全成熟的仅限标题的库(任何人都能看到我错过的其他内容吗?)
许多Boost库使用类似的技巧只是标题,即使他们的代码不是完全模板.例如Asio,非常有意识地使用标志提出替代方案(参见Asio 1.4.6的发行说明):
通过这种方式(以图书馆开发人员的一些更多努力为代价),客户得到了他们的蛋糕并且也吃了它.我认为这是一个非常好的解决方案.
注意:我想知道static函数是否可以内联,我更喜欢自己使用匿名命名空间,所以从来没有真正研究过它......