微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

防止在静态库中隐式实例化 std::string/std::wstring

如何解决防止在静态库中隐式实例化 std::string/std::wstring

我编写了一个示例静态库。
我想抑制 std::string/std::wstring 的隐式实例化。我提到了这个 link 并且我声明了模板类 std::basic_string (外部模板)的显式实例化。我预计静态库不会包含 std::basic_string 的任何符号。但是 dumpbin 实用程序显示库中存在 basic_string 的符号。 代码如下:

// testLib.h   
#pragma once

namespace staticLib{

    void TestLib();
}

// testLib.cpp  
#include < string >     
#include "testLib.h";

//Explicit instantiation declaration   
extern template class std::basic_string< char> ; // Is this correct?

namespace staticLib {

    void TestLib() {
        std::string str = "Testing";
        str.size();
        str.erase();
    }
}

转储日志:

enter image description here

我的问题如下:

  1. 有没有办法抑制 std::string/std::wstring 的隐式实例化。
  2. 在 testLib.cpp 中有一个“std::basic_string 的显式实例化声明”。对吗?
  3. 为什么声明 basic_string 的显式实例化并不能阻止隐式实例化和库中的符号。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。