编辑: boost::any using bcp (感谢 AraK)似乎是迄今为止最好的解决方案,但是否有可能(在某种程度上)证明不存在针对这个问题的 ANSI C++ 解决方案?
您似乎对这里的术语有些困惑。
首先,我们称它为 ISO C++,好吗?它于 1998 年由 ISO 标准化,从那时起,人们在谈论“标准 C++”时就提到了这一点。现在,“ANSI C++ 解决方案”是什么意思?
- 仅使用 ANSI(或 ISO)C++ 即可干净编译的解决方案?如果是这样,Boost是ANSI C++ 解决方案
- 已在 ANSI C++ 标准库中实现的解决方案?如果是这样,那么不,不存在这样的解决方案(并且没有“证据”,除了“阅读语言标准,看看你是否能找到这样的课程。如果你不能,那就不存在”。
- 您可以仅使用 ANSI C++ 自行实现的解决方案。那么答案是“是的,你可以从 Boost 复制源代码”。
我无法想象你会寻找什么样的“证据”。C++ 是散文形式的文档。它不是一个数学方程式。它不能被“证明”,除非说“去阅读标准”。证明某些东西是在语言或标准库中定义的很容易——只需指出它在标准中的描述位置。但是证明不存在某些东西基本上是不可能的——除了列举标准的每一个句子,并记录它们都没有描述你正在寻找的东西。我怀疑你会找到愿意为你做这件事的人。
无论如何,正确的标准 C++ 解决方案是使用 Boost。这不是一个重量级的解决方案。Boost 非常轻量级,因为您可以准确地包含您需要的位,而不依赖于库集合的其余部分。
根据您所描述的(适用于广泛用户群的轻量级应用程序),不使用 Boost 的理由为零。它可以简化您的代码并减少因尝试重新发明轮子而导致的错误数量。分发编译后的可执行文件时,它的成本为零。该Boost.Any
库与 Boost 的大部分内容一样,只有标头,并且只是编译到您的可执行文件中。不必分发单独的库。
试图重新发明轮子没有任何收获。您的可执行文件不会更小或更高效,但它会更多错误。
而且我敢打赌,您自制的解决方案不会是 ANSI C++。它将依赖于某种形式的未定义行为。如果你想要一个 ANSI-C++ 解决方案,你最好的选择是 Boost。