簡體   English   中英

為什么在類聲明中使用宏

[英]Why use macro in the class declaration

我正在閱讀leveldb的源代碼,特別是。 關於互斥鎖。

我發現了這個聲明:

class SCOPED_LOCKABLE MutexLock {
 public:
  explicit MutexLock(port::Mutex *mu) EXCLUSIVE_LOCK_FUNCTION(mu)
      : mu_(mu)  {
    this->mu_->Lock();
  }
  ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); }

 private:
  port::Mutex *const mu_;
  // No copying allowed
  MutexLock(const MutexLock&);
  void operator=(const MutexLock&);
};

我發現SCOPED_LOCKABLE被定義為空,那么為什么要在類聲明中使用它呢?

在類或函數定義中,如果開發人員需要附加額外的特性,則在每個類或函數定義中使用MACROS而不是硬編碼。 這是編程的好習慣。 因為有一天如果你需要改變這個特性,你必須只改變一個地方而不是代碼的任何地方。

類定義中宏的一些用法

#ifdef CONTROLLER_EXPORTS
   #define CONTROLLER_API __declspec(dllexport)
#else
   #define CONTROLLER_API __declspec(dllimport)
#endif

class CONTROLLER_API CConfiguration{
} ;

你可以在這里獲得更多與windows相關的有用線索。 http://msdn.microsoft.com/en-us/library/dabb5z75(v=vs.80).aspx

即使您也可以使用這樣的訪問修飾符,因為測試時間可能需要臨時更改訪問級別。

#define PRIVATE private
#define PUBLIC public

class A{
PRIVATE:
  int m_a;
PUBLIC:
  int m_b;
}

那么你的問題到底是什么? 它可以是任何有用的特征,如上所述。 這是我從git得到的一個例子

#define SCOPED_LOCKABLE     __attribute__ ((scoped_lockable)) 
  • 有關__attribute__詳細信息,請點擊此處
  • 對於源我上面的代碼檢查了這里

它可能被定義為在不同環境中的不同之處。 有時它會影響聯系。

它還可以指示需要包含其他標頭以使庫標頭正確配置。

暫無
暫無

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

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