Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 防止在静态库中隐式实例化std::string/std::wstring_C++_C++11_Templates_Stdstring_Wstring - Fatal编程技术网

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

C++ 防止在静态库中隐式实例化std::string/std::wstring,c++,c++11,templates,stdstring,wstring,C++,C++11,Templates,Stdstring,Wstring,我已经编写了一个示例静态库。 我想抑制std::string/std::wstring的隐式实例化。我引用了这一点,并声明了模板类std::basic_string(extern template)的显式实例化。我希望静态库不会包含std::basic_字符串的任何符号。但是dumpbin实用程序显示库中存在基本字符串的符号。 代码如下: // testLib.h #pragma once namespace staticLib{ void TestLib(); } // t

我已经编写了一个示例静态库。
我想抑制std::string/std::wstring的隐式实例化。我引用了这一点,并声明了模板类std::basic_string(extern template)的显式实例化。我希望静态库不会包含std::basic_字符串的任何符号。但是dumpbin实用程序显示库中存在基本字符串的符号。 代码如下:

// 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();
    }
}
//testLib.h
#布拉格语一次
命名空间静态库{
void TestLib();
}
//testLib.cpp
#包括
#包括“testLib.h”;
//显式实例化声明
外部模板类std::basic_string;//这是正确的吗?
命名空间静态库{
void TestLib(){
std::string str=“测试”;
str.size();
str.erase();
}
}
dumpbin日志:

我的问题如下:

// 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();
    }
}
  • 是否有任何方法可以抑制std::string/std::wstring的隐式实例化
  • testLib.cpp中有一个“std::basic_string的显式实例化声明”。对吗
  • 为什么基本_字符串的显式实例化声明不能阻止隐式实例化和库中的符号

  • “我想抑制std::string/std::wstring的隐式实例化”为什么?我希望显式实例化声明发生得很晚,并且
    string
    已经隐式实例化了…@dyp。谢谢你的评论。我正在尝试将静态库与DLL(比如DLL a)链接。此DLL再次链接到另一个DLL(例如DLL abc)。DLL abc显式实例化std::basic_字符串并继承它。在链接过程中,对于静态库和DLL abc的std::basic_字符串的某些方法,我得到了链接器错误。发生这种情况的原因是,它们都有std::basic_string的符号。因此,我想从静态库中抑制符号。我不能修改abc.dll该问题与问题类似。谢谢你@dyp