小编mrD*_*son的帖子

打印任何STL容器

您将如何编写一个库,当包含它时,它会使任何*现有STL容器的<<运算符超载?

  • 除了堆栈和队列之类的适配器,因为您无法遍历它们.

一个自我强加的要求是它不能包含任何容器的头文件.这将不必要地膨胀最终的可执行文件.在我希望使用的容器之后包含此标头更有意义.这种限制意味着使用templatesmacros.

我正在寻找建议和指示,所以,不要发布能够做到这一点的完全正常工作的代码!自己实现这一点是学习过程的一部分.代码片段的小片段可以展示某些东西是如何工作的.

到目前为止我做了什么:

<<为每个具有不同模板签名的容器重载了运算符.我遇到的问题是,有些容器具有相同数量的模板参数,但有些容器包含std::pair-s,其他容器single values.更确切地说,这是std::map&std::multimapvs std::unordered_set&的情况std::unordered_multiset.

这次碰撞迫使我要么实现其中一对的非模板版本,要么想出一种区分std::pair-s和-s 的方法single values.不过,我真的不知道如何去做第二个.我之所以不直接" 怎么做 " 的原因是我开始相信这可以通过更好的整体设计来完全避免.

先感谢您!



什么对我有用:

  1. 超载operator<<std::pair
  2. operator<<使用不同的模板参数重载每个STL容器

    注意:

    1. template <typename T1>并且template <typename T1, typename T2> 不同的
    2. template <typename T1, typename T2>并且template <typename T1, size_t T2> 不同的
    3. template …

c++ templates stl c++14

15
推荐指数
2
解决办法
2615
查看次数

如何将C运行时库与'ld'链接?

我正在学习NASM大学课程.我想链接C运行时库ld,但我似乎无法环绕它我的头.我有一64 bitLinux Mint已安装的机器.

我感到困惑的原因是 - 据我所知 - 而不是链接C运行时,gcc将您需要的东西复制到程序中.我可能错了,所以请不要犹豫,纠正我.

到目前为止我所做的是将其链接起来gcc.产生的机器代码,我无法跟随虽然乱七八糟,甚至像换了一个小程序raxrbx,这不是学习的目的,伟大的.(请注意该程序有效.)

我不确定它是否相关,但这些是我用来编译和链接的命令:

# compilation
nasm -f elf64 swap.asm
# gcc
gcc -o swap swap.o
# ld, no c runtime
ld -s -o swap swap.o
Run Code Online (Sandbox Code Playgroud)

先感谢您!


结论:

既然我对这个问题有了正确的答案,我想提一下以下几点.glibc动态链接可以像Z boson的答案(对于64位系统)那样完成.如果你想静态地做,请按照这个链接(我从Z boson的回答中重新发布).

这是Jester发布的一篇关于程序如何从linux开始的文章.

要查看gcc链接.o-s的内容,请尝试以下命令:gcc -v -o swap swap.o.请注意,'v'代表'详细'. …

linux assembly gcc nasm ld

12
推荐指数
1
解决办法
1349
查看次数

标签 统计

assembly ×1

c++ ×1

c++14 ×1

gcc ×1

ld ×1

linux ×1

nasm ×1

stl ×1

templates ×1