Лямбда со структурированными привязками внутри макроса вызоваC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Лямбда со структурированными привязками внутри макроса вызова

Сообщение Anonymous »

Это может быть связано с тем, как правильно направить структурированные аргументы привязки на макросе, но я чувствую, что реальная проблема не такая же, поэтому может иметь другое решение. < /p>
Я хочу Чтобы пройти лямбду в качестве генератора имен внутри instantiate_test_test_suite_p. Это хорошо работает, пока я не попытаюсь использовать структурированные привязки, чья запятая заставляет препроцессор думать, что оно разделяется на отдельные аргументы. < /P>
using param = std::tuple;

// This works
INSTANTIATE_TEST_SUITE_P(
instance, suite, cases,
[](const testing::TestParamInfo
& info) {
return std::string(std::get(info.param)
+ "_to_" + std::string(std::get(info.param));
}
);

// This also works
static constexpr auto name = [](const testing::TestParamInfo& info) {
const auto [a, b] = info.param;
return std::string(a) + "_to_" + std::to_string(b);
};

INSTANTIATE_TEST_SUITE_P(
instance, suite, cases, name
);

// But this does not compile
INSTANTIATE_TEST_SUITE_P(
instance, suite, cases,
[](const testing::TestParamInfo& info) {
const auto [a, b] = info.param;
return std::string(a) + "_to_" + std::to_string(b);
}
);
< /code>
Я знаю, что в некоторых случаях, например, шаблонные аргументы, запятая может быть защищена от препроцессора дополнительным набором скобок. Можно ли сделать то же самое здесь? Я пытался разместить скобки вокруг структурированного связывания, но оно тоже не компилировало.


Подробнее здесь: https://stackoverflow.com/questions/794 ... macro-call
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»