std::map 和 -fno-implicit-templates
我正在尝试使用 g++ 4.4 进行编译并链接一个使用 STL 的简单程序。 我正在尝试使用 -fno-implicit-templates 来完成此操作,因此所有模板都必须显式实例化。
我不明白为什么这段代码有效:
#include <map>
//template class std::map<char,char>;
template class std::_Rb_tree<char, std::pair <char const, char>,
std::_Select1st<std::pair<char const, char> >,
std::less<char>, std::allocator<std::pair<char const, char> > >;
int main() {
std::map <char,char> table;
return 0;
}
我希望该程序需要以下行:template class std::map
< /em>,但是该行不会使程序链接。需要 std::_Rb_tree 行
。为什么?
预先感谢,任何提示将不胜感激。
I am trying to compile with g++ 4.4 and link a simple program that uses the STL.
I am trying to do it using the -fno-implicit-templates so all templates must be instantiated explicitly.
I don't understand why this code works:
#include <map>
//template class std::map<char,char>;
template class std::_Rb_tree<char, std::pair <char const, char>,
std::_Select1st<std::pair<char const, char> >,
std::less<char>, std::allocator<std::pair<char const, char> > >;
int main() {
std::map <char,char> table;
return 0;
}
I would expect that this program needs the line: template class std::map<char,char>;
, however that line does not make the program link. The std::_Rb_tree line
is needed. Why?
Thanks in advance, any hint will be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
地图在其实现中使用红黑树,因此您必须显式实例化地图实例化所需的树类型。恕我直言,这看起来不像是一个特别有用的编译器标志。
Maps use red-black trees in their implementation, so you have to explicitly instantiate the type of tree required for the instantiation of map. This does not look like a particularly useful compiler flag, IMHO.