我找到了以下代码(自动生成,但无法编译),现在我想知道它的含义:
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 的行中说:缺少';' 在标识符“类型”之前(编译器是安装了 SP1 的 VS2010)
谁能告诉我?(代码由 OpenSplice 的 idlpp.exe 生成)
原因现在很清楚(我忘记了 idl 中的 #pragma keylist 条目) - 没有生成 UnboundedStringWithKeyTypeSupport。但这是一个不同的问题。
问候托拜厄斯