dds — что означает эта конструкция кода C ++?

Я нашел следующий код (автоматически сгенерированный, но он не компилируется), и теперь я хочу знать, что это значит:

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 не генерируется. Но это другой вопрос.

С уважением
Тобиас

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector