2016-05-31 8 views
1

最近、私はCを使ってオブジェクト指向プログラミングを学び始めました。 ウェブ上で興味深い資料を見つけました。それらの1つはGithubのQMonkey/OOC-Design-Patternリポジトリです。以下は_construct(Cではoopプロジェクトで使用されるマクロ)

QMonkey/OOC-デザインパターンに含まれるbase.hは次のとおりです。 https://github.com/QMonkey/OOC-Design-Pattern

は、ここに私の質問です。 これは、このOOP Cプロジェクトで使用される基本マクロです。 #、##、offsetof、およびcontainer_ofについて多くの説明がありました。 私はそれを理解できない唯一の事は、_destructと_constructの使い方です。彼らの説明はどこにありますか?

ありがとうございました。

#ifndef BASE_H 
#define BASE_H 

#include <stdlib.h> 
#include <stddef.h> 

// clang-format off 
#define container_of(ptr, type, member)     \ 
    ({        \ 
     const typeof(((type *)0)->member) *__mptr = (ptr); \ 
     (type *)((char *)__mptr - offsetof(type,member)); \ 
    }) 

#define new(TYPE, args...) TYPE ## _construct(malloc(sizeof(TYPE)), ## args) 
#define delete(TYPE, ptr) do    \ 
       {    \ 
        TYPE ## _destruct(ptr); \ 
        free(ptr);  \ 
       }    \ 
       while(0) 
// clang-format on 

#endif 
+1

私は、そのプロジェクトの作者がOOPをどのように定義しているのか疑問に思います... 'new'と' delete'はOOPと全く関係ありません。また、不透明/不完全型を使用せずにクラスの割り当て/解放を試みるCコードはおそらく疑わしい品質です。 – Lundin

答えて

1

_construct_destructtoken pasting operator, ##を使用して、クラス名に付加されているだけの接尾辞です。したがって、TYPEMyClassなら、MyClass_constructMyClass_destructというコンストラクタ/デストラクタ関数があります。

+1

本当に本当に本当にありがとう。 –

関連する問題