次のコードを見つけました (自動生成されますが、コンパイルされません)。今、それが何を意味するのか知りたいです:
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 が生成されていません。しかし、それは別の質問です。
よろしくトバイアス