gpt4 book ai didi

c++ - 模板类和 typedef

转载 作者:行者123 更新时间:2023-11-28 04:58:14 25 4
gpt4 key购买 nike

有一个模板类

template <ACE_SYNCH_DECL, class TIME_POLICY = ACE_System_Time_Policy>
class ACE_Task : public ACE_Task_Base

ACE_SYNCH_DECL 可以是

class ACE_Export ACE_NULL_SYNCH
{
public:
typedef ACE_Null_Mutex MUTEX;
typedef ACE_Null_Mutex NULL_MUTEX;
typedef ACE_Null_Mutex PROCESS_MUTEX;
typedef ACE_Null_Mutex RECURSIVE_MUTEX;
typedef ACE_Null_Mutex RW_MUTEX;
typedef ACE_Null_Condition CONDITION;
typedef ACE_Null_Condition RECURSIVE_CONDITION;
typedef ACE_Null_Semaphore SEMAPHORE;
typedef ACE_Null_Mutex NULL_SEMAPHORE;
};

class ACE_Export ACE_MT_SYNCH
{
public:
typedef ACE_Thread_Mutex MUTEX;
typedef ACE_Null_Mutex NULL_MUTEX;
typedef ACE_Process_Mutex PROCESS_MUTEX;
typedef ACE_Recursive_Thread_Mutex RECURSIVE_MUTEX;
typedef ACE_RW_Thread_Mutex RW_MUTEX;
typedef ACE_Condition_Thread_Mutex CONDITION;
typedef ACE_Condition_Recursive_Thread_Mutex RECURSIVE_CONDITION;
typedef ACE_Thread_Semaphore SEMAPHORE;
typedef ACE_Null_Semaphore NULL_SEMAPHORE;
};

但是 ACE_Task 中没有使用 ACE_SYNCH_DECL,那么这些 typedef 是如何工作的呢?

最佳答案

当您实例化 ACE_Task 时,ACE_SYNCH_DECL 参数将替换为 ACE_MT_SYNCH 或 ACE_NULL_SYNCH 之一,具体取决于您是否需要 ACE_Task 类中的同步队列。

如果 ACE_Task 仅在一个线程中使用,则不需要队列同步开销,可以使用 ACE_NULL_SYNCH。但是,如果要从多个线程使用它,请使用 ACE_MT_SYNCH。

tests/Message_Queue_Test.cpp中有ACE_NULL_SYNCH的例子

顺便说一句,这在 C++NPv2 中有更详细的解释。第 6.2 和 6.3 节。

关于c++ - 模板类和 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46706579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com