Захват this-указателя в лямбда-оболочке вокруг рекурсивной функции
У меня есть шаблон классаWrap
с рекурсивной функцией-членомtest(int)
что я хочу перейти на алгоритм STL с лямбда (std::accumulate
в коде ниже).
Если я использую список захвата по умолчанию=
и сделай мою рекурсивную функцию meberstatic
, все в порядке и получить результат, который я хочу.
Однако, если я сделаю это нестатической функцией-членом, и Visual C ++, и gcc 4.7.2 пожалуются на унифицированнуюthis
указатель, если я не квалифицирую свой рекурсивный вызов как.this->test()
#include
#include
#include
template
struct Wrap
{
static int test1(int depth)
{
std::vector v = { 0, 1, 2, 3 };
return depth == 0? 1 : std::accumulate(v.begin(), v.end(), int(0), [=](int sub, int const&) {
return sub + test1(depth - 1);
});
}
int test2(int depth)
{
std::vector v = { 0, 1, 2, 3 };
return depth == 0? 1 : std::accumulate(v.begin(), v.end(), int(0), [=](int sub, int const&) {
return sub + /*this->*/test2(depth - 1);
});
}
};
int main()
{
std::cout < Wrap