小编Iva*_*ich的帖子

非依赖名称查找和lambda

我有以下代码:

template <class T>
class Outer
{
public:
    Outer();

    template <class U>
    void templateFunc()
    {
    }

private:
    class Inner
    {
    public:
        Inner(Outer& outer)
        {
            outer.templateFunc<int>();
            Outer* outer_ptr = &outer;
            [outer_ptr]() 
            {
                outer_ptr->templateFunc<int>();
            }();
        }
    };

    Inner m_inner;
};

template <class T>
Outer<T>::Outer()
    : m_inner(*this)
{
}

int main()
{
    Outer<double> outer;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,有一个模板类包含一个嵌套类,它在构造函数中调用其封闭类的一些模板方法.AFAIK,即使封闭类是一个模板类 - 对于嵌套类,它是一个非依赖名称,因此调用其模板方法不template应该是一个问题.当我在嵌套类的构造函数中定义lambda,捕获指向外部类的指针,并尝试调用相同的模板方法时,问题就出现了 - g ++ 7.2给出了以下编译错误:

prog.cc: In lambda function:

prog.cc:22:41: error: expected primary-expression before 'int'
                outer_ptr->templateFunc<int>();
                                        ^~~
prog.cc:22:41: error: expected ';' before 'int'
Run Code Online (Sandbox Code Playgroud)

但是,g …

c++ lambda templates language-lawyer c++11

16
推荐指数
1
解决办法
331
查看次数

标签 统计

c++ ×1

c++11 ×1

lambda ×1

language-lawyer ×1

templates ×1