gpt4 book ai didi

c++ - 将 boost 与显式模板实例一起使用

转载 作者:搜寻专家 更新时间:2023-10-31 01:17:55 24 4
gpt4 key购买 nike

我们已经使用 Boost 构建了一个 C++ 库,当我们尝试将库集成到二进制文件中时,由于用于构建二进制文件的“--instances=explicit”选项,我们在链接时遇到了问题。

问题是,当我们使用 --instances=explicit 选项(Sun CC 编译器的)时,它希望我们显式实例化模板。当我们将 Boost 与此选项一起使用时,由于 Boost 在内部使用模板,因此链接器会抛出“ undefined symbol ”错误 - 这是预期的,因为我们没有显式实例化 Boost 中使用的模板。

虽然我明白为什么链接器会在这里抛出错误,但在代码中显式实例化所有 boost 模板看起来很棘手。因此,想检查是否有任何解决方案/变通方法可以将 Boost 与 Sun CC 编译器的“-instances=explicit”选项一起使用。

非常感谢任何帮助。

我们可以用简单的示例代码将问题重现为 -

#include <iostream>
#include <boost/lexical_cast.hpp>
int main()
{
std::cout<<boost::lexical_cast<int>(“8”)<<std::endl;
}

使用“--instances=explicit”选项

Undefined                       first referenced
symbol in file
__type_0 boost::detail::lexical_cast<unsigned,std::string,false,char>(__type_0,__type_3*,unsigned) lexical.o
ld: fatal: Symbol referencing errors. No output written to a.out

没有“--instances=explicit”选项,这工作正常。

最佳答案

您不能将显式模板实例化和高级模板编程结合起来。甚至不要尝试!

从历史上看,其他语言(例如 ADA)在 C++ 之前就有模板,但它们使用显式模板实例化。 C++ 是第一个使用隐式模板实例化的主流语言。正是这种变化(从显式实例化到隐式实例化)使现代模板编程技术成为可能。如果没有隐式模板实例化,就不会有 STL 和 Boost。

关于c++ - 将 boost 与显式模板实例一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7714015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com