1

次のコードを見つけました (自動生成されますが、コンパイルされません)。今、それが何を意味するのか知りたいです:

template<> struct topic_type_support<UnboundedStringWithKey> 
{            
    typedef UnboundedStringWithKey##TypeSupport type;                
};

一部の人が指摘したように、## はマクロ用であり、実際にコードはマクロ内にありました。私はこれに気づいていなかったので、コードに直接入れて、より明確なエラー メッセージを取得しようとしました。元のマクロは次のとおりです。

#define REGISTER_TOPIC_TRAITS(TOPIC)                    \
namespace dds { namespace topic {                    \
template<> struct topic_type_support<TOPIC> {            \
    typedef TOPIC##TypeSupport type;                \
};                                \
template<> struct is_topic_type<TOPIC> { enum {value = 1 }; };    \
template<> struct topic_type_name<TOPIC> {            \
    static std::string value() {                    \
        static topic_type_support<TOPIC>::type ts;            \
        return ts.get_type_name();                    \
    }                                \
};                                \
} }  

元のコンパイラ エラーは次のとおりです: 構文エラー: ';' がありません 識別子「タイプ」の前

手動でマクロを挿入し、## を適用しました。

template<> struct topic_type_support<UnboundedStringWithKey> 
{            
    typedef UnboundedStringWithKeyTypeSupport type;                
}; 

しかし、typedef: missing ';' の行に直接記載されています。識別子 'type' の前 (コンパイラは SP1 がインストールされた VS2010 です)

誰でも教えてもらえますか?(コードは OpenSplice の idlpp.exe によって生成されます)

その理由は明らかです (idl の #pragma keylist エントリを忘れていました) - UnboundedStringWithKeyTypeSupport が生成されていません。しかし、それは別の質問です。

よろしくトバイアス

4

0 に答える 0