簡體   English   中英

模板類和typedef

[英]template class and typedef

有一個模板類

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_Task類中使用同步隊列,將ACE_SYNCH_DECL參數替換為ACE_MT_SYNCH或ACE_NULL_SYNCH之一。

如果僅在一個線程中使用ACE_Task,則不需要隊列同步開銷,並且可以使用ACE_NULL_SYNCH。 但是,如果要在多個線程中使用它,請使用ACE_MT_SYNCH。

在tests / Message_Queue_Test.cpp中有一個ACE_NULL_SYNCH的示例

順便說一句,這在C ++ NPv2的 6.2和6.3節中有更詳細的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM