Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

プロトコルメソッドへのリンク

タグ: Doxygen Objective-C
/**
 * @brief プロトコル Foo のメソッドへのリンクは……
 *
 * - Foo::bar では発生しない
 * - Foo-p::bar でも発生しない
 * - @ref Foo-p::bar で発生する
 */
@protocol Foo
/**
 * @brief このメソッドにリンクしたい
 */
- (void)bar;
@end
protocol_ref.png

以上、Doxygen 1.5.7.1のお話。
「-p」というのは、プロトコル名とクラス名が衝突しないよう、Doxygenがプロトコルの識別子に付ける接尾辞。
それを直接利用することで、半ば無理矢理リンクを生成させている。
もちろん、正規の書き方ではない(と思う)。今後もこう書けるという保証もない。
ちなみに、同じFooという名前のクラスが存在する場合、プロトコルFooへのリンクになっていた Foo はクラスFooへのリンクとなり、 Foo::bar はクラスFooのメソッドbarへのリンクとなる。

で。
ここでふと、疑問に思ったのだが……
Objective-Cのクラスとプロトコルは、これで名前の衝突が回避できる。
では、Objective-CとC++で同名のクラスがあった場合、果たしてどうなるのだろう。

/**
 * @brief C++クラス
 *
 * この Foo::bar はどこにリンクする?
 */
class Foo
{
    /**
     * @brief C++クラス Foo のメンバ変数
     */
    int bar;
};

/**
 * @brief Objective-Cクラス
 *
 * この Foo::bar はどこにリンクする?
 */
@interface Foo
/**
 * @brief Objective-Cクラス Foo のインスタンスメソッド
 */
- (void)bar;
@end
cpp_objc_conflict1.png

む。C++のクラスしかない。
C++の方が優位なのか?

cpp_objc_conflict2.png

(;゚Д゚)混ざってる!

……て。
よく考えたら、クラス名はC++とObjective-Cで衝突するから、分けられないのは当たり前だった。
一晩寝て気づいたよ……('A`)

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/169-9a9459ab
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。