Я нашел следующий код (автоматически сгенерированный, но он не компилируется), и теперь я хочу знать, что это значит:
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: пропущенный ‘;’ перед идентификатором ‘type’ (компилятор VS2010 с установленным SP1)
кто-нибудь может сказать мне?
(код генерируется idlpp.exe из OpenSplice)
причина теперь ясна (я забыл запись списка ключей #pragma в idl) — UnboundedStringWithKeyTypeSupport не генерируется. Но это другой вопрос.
С уважением
Тобиас
Задача ещё не решена.
Других решений пока нет …