Мне нужно написать макрос, который обрабатывает произвольно длинный список таких вещей, как (A)(B)(C)
. Если бы я мог взять зависимость Boost, я бы просто использовал один из макросов BOOST_PP_SEQ_
. К сожалению, я не могу, поэтому я остаюсь, пытаясь понять, как это работает. Это вещество не очевидно.
Может ли кто-нибудь здесь написать простую, автономную реализацию, скажем, BOOST_PP_SEQ_FOLD_LEFT
, чтобы я мог посмотреть? В частности, я хотел бы преобразовать:
template_(class A, class B, class C)(
requires IsFoo<A> && IsBar<B>)(
requires IsBaz<C>)
void frobozzle(A, B, C);
будет переписан как:
template<class A, class B, class C,
int dummy = 0,
std::enable_if_t<dummy == 0 && (IsFoo<A> && IsBar<B>), int> = 0,
std::enable_if_t<dummy == 0 && (IsBaz<C>), int> = 0>
void frobozzle(A, B, C);
Может существовать произвольное число предложений requires
, и каждый из них должен получить свой собственный enable_if_t
. Я работаю с одним предложением requires
, но я исчерпал свой препроцессор C-fu в процессе.
В порядке, чтобы предположить std-совместимый препроцессор, так как мне не нужна поддержка MSVC.