小编Shu*_*uki的帖子

Typedef相互引用的stl容器

我有一个std::map和一个std::list.我希望容器中的元素具有相对容器的迭代器的类型.

我该怎么输入它们?

例:

 typedef std::map<MyKeyClass, typename MyList::iterator> MyMap;
 //                                    ^ MyList not defined.
 typedef std::list<typename MyMap::iterator> MyList;
Run Code Online (Sandbox Code Playgroud)

当然,反转两条线是行不通的.

我也试过了

 typedef std::map<MyKeyClass,
                  typename std::list<typename MyMap::iterator>::iterator> MyMap;
 typedef std::list<typename MyMap::iterator> MyList;
Run Code Online (Sandbox Code Playgroud)

但那也不起作用.

更新: 我需要这个的原因是通过订单的2个方面跟踪键/值对.让我们说我有一个map<KEY,VALUE>.它按KEY排序,按键查找值很快.但我还希望在添加值时跟踪值.我想知道最近添加的值是哪个.要做到这一点,我使用列表.我需要从地图返回列表的迭代器的原因是擦除容器中的元素.当我用键擦除地图中的元素时,我还需要擦除列表中的元素.我也需要相反(删除最近的值).我发现我的想法是明确地使用指针(如在注释中)不起作用,因为我实际上需要一个迭代器来擦除容器中的元素.

更新2: 我问这个因为我觉得有点奇怪,我不能这样做.我经常使用STL容器作为基本数据结构(就像每个人一样).例如,std::map可以用作具有显式结构和指针的二叉树实现的替代方法.STL容器设计得很好,我没有经历过我不能使用STL容器来表达一些可以通过struct和pointer完成的结构.它们可能无法保证STL容器具有与struct和指针结构相同的属性.但是,由于结构如此简单,我觉得有点奇怪,我无法用STL容器表达它.

c++ stl list map

5
推荐指数
1
解决办法
215
查看次数

如何在 CMake 中设置 --whole-archive 标志,以便所有依赖项使用它

我有一个静态链接库(比如 libfoo)。

 add_library(foo STATIC foo.cpp)
Run Code Online (Sandbox Code Playgroud)

有许多可执行文件链接(使用)这个库。

 add_executable(myexe1 myexe1.cpp)
 link_target_libraries(myexe1 foo)
 add_executable(myexe2 myexe2.cpp)
 link_target_libraries(myexe2 foo)
 add_executable(myexe3 myexe3.cpp)
 link_target_libraries(myexe3 foo)
 #... and so on. (These definitions are actually scattered in the project)
Run Code Online (Sandbox Code Playgroud)

现在我想-Wl,--whole-archive对图书馆使用标志。似乎一种解决方案是在可执行端添加标志。

 add_executable(myexe1 myexe1.cpp)
 link_target_libraries(myexe1 -Wl,--whole-archive foo -Wl,--no-whole-archive)
Run Code Online (Sandbox Code Playgroud)

但是这样我每次定义链接到这个库的可执行文件时都必须写这个。

有没有办法将此标志添加到库定义端,以便在链接依赖库的可执行文件时始终使用该标志?

c c++ cmake

5
推荐指数
1
解决办法
2863
查看次数

从没有管理员权限的应用程序启动Windows服务(c ++)

我写了一个Windows服务(运行正常).现在我有一个单独的应用程序,我想从中启动此服务,但似乎没有管理员权限这是不可能的.

如何使用适当的解决方案看起来用户可以启动/停止服务(例如,从托盘或应用程序)

恕我直言,应用程序必须始终以管理员权限启动.

c++ windows service

2
推荐指数
1
解决办法
3275
查看次数

等待队列和竞争条件

我正在阅读 Robert Love 的《Linux 内核开发》,并找到下面的代码来等待事件。

DEFINE_WAIT(wait);

add_wait_queue(q, &wait); 
while (!condition) {
    // What happens if condition is changed and wake_up() is called here ?
    prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE); 
    if (signal_pending(current))
        /* handle signal */ 

    schedule();
}

finish_wait(&q, &wait);
Run Code Online (Sandbox Code Playgroud)

我的问题如上面的代码所示。如果条件更改并wake_up()在条件检查之后但之前调用,会发生什么情况prepare_to_wait?我在这里的(可能是错误的)解释是,因为在条件改变后prepare_to_wait创建线程TASK_INTERRUPTIBLE并调用,所以它永远休眠(除非它收到信号或调用另一个线程)。schedule()wake_up

linux-kernel

2
推荐指数
1
解决办法
653
查看次数

Mac OS X调试界面在哪里?

我是UNIX和Mac OS X系统的新手,想知道Max OS X上的调试是如何工作的.我来自Windows世界,我熟悉Windows中的调试系统,例如使用DebugActiveProcess附加到进程,使用Read/WriteProcessMemory读取/写入内存等等...

我不知道Mac OS X的调试是否也像Windows一样令人担忧,但我想知道Max OS X中的调试器如何与目标进程通信.任何人都可以给我一些起点或文档,我应该先阅读吗?

unix debugging macos

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

标签 统计

c++ ×3

c ×1

cmake ×1

debugging ×1

linux-kernel ×1

list ×1

macos ×1

map ×1

service ×1

stl ×1

unix ×1

windows ×1