У меня есть boost :: tuple из указателей (количество указателей неизвестно заранее, что является шаблоном метапрограммирования).Nullify/Clear boost :: кортеж указателей
Например:
boost::tuple<int*, Foo*, std::string*> mytuple
Есть ли способ, чтобы инициализировать указатели на 0?
Я попытался создать предикат, такие как:
struct Nullify
{
template <class TypePtr>
void operator()(TypePtr& ptr) const
{
ptr = 0
}
};
boost::fusion::for_each(mytuple, Nullify());
Но я получаю error: no matching function for call to...
В идеале, если это возможно, я хотел бы, чтобы использовать повышение :: лямбда внутри цикла for_each непосредственно не отдельная структура. (Я использую C++ 03)
например. для аннулирования
boost::fusion::for_each(mytuple, boost::lambda::_1 = 0);
например. удалить
boost::fusion::for_each(mytuple, delete boost::lambda::_1);
Вы можете использовать некоторые [шаблоны] (https://stackoverflow.com/questions/10766112/c11-i-can-go-from-multiple-args-to-tuple-but-can-i-go- from-tuple-to-multiple), чтобы «распаковать» кортеж и выполнить операцию для каждого элемента. [См. Также] (https://stackoverflow.com/questions/7858817/unpacking-a-tuple-to-call-a-matching-function-pointer). – CoryKramer
@CoryKramer C++ 03 – Yakk
Я действительно хотел, чтобы это было сделано в режиме «диапазона»: в идеале я искал выражение boost: lambda (например, _1 = 0), чтобы включить в цикл for_each, чтобы оно было как насколько это возможно – codeJack