К сожалению, так я теряю пусть небольшой, но приятный ф-ционал std::pair (конструктор(ы), оператор < и др).
Ну так и определите их в макросе. В чём проблема?
C++ (Qt)
#define CREATE_STRUCT(name, first, second) \
template <class T1, class T2> \
struct name \
{ \
T1 first; \
T2 second; \
name() {} \
name(const T1 & arg1, const T2 & arg2) : first(arg1), second(arg2) {} \
}; \
template <class T1, class T2> \
bool operator<(const name<T1, T2> & p1, const name<T1, T2> & p2) {} \
И ещё в макрос можно засунуть специализацию make_pair, например..