带有 lambda 表达式的模板类中存在语法错误

发布于 2024-12-10 23:16:04 字数 956 浏览 0 评论 0原文

我有以下简化场景:

template< typename T>
struct A
{
  A() : action_( [&]( const T& t) { })
  {}

private:
   boost::function< void( const T& )> action_;
};

使用 Visual C++ 2010 进行编译时,它在构造 action_ 时出现语法错误:

1>test.cpp(16): error C2059: syntax error : ')'
1>          test.cpp(23) : see reference to class template instantiation A<T>' being compiled

奇怪的是,没有模板参数的同一个示例编译得很好:

struct A
{
  A() : action_( [&]( const int& t) { })
  {}

private:
  boost::function< void( const int& )> action_;
};

我知道有一种解决方法问题是在构造函数主体中移动 action_ 初始化,而不是初始化列表,如下面的代码所示:

template< typename T>
struct A
{
  A()
  {
    action_ = [&]( const T& t) { };
  }

private:
  boost::function< void( const T& )> action_;
};

...但我想避免这种解决方法。

有人遇到过这样的情况吗?对于这个所谓的语法错误有什么解释/解决方案吗?

I have the following simplified scenario:

template< typename T>
struct A
{
  A() : action_( [&]( const T& t) { })
  {}

private:
   boost::function< void( const T& )> action_;
};

When compiling with Visual C++ 2010, it gives me a syntax error at construction of action_:

1>test.cpp(16): error C2059: syntax error : ')'
1>          test.cpp(23) : see reference to class template instantiation A<T>' being compiled

What is strange is that the same example, with no template parameter, compiles just fine:

struct A
{
  A() : action_( [&]( const int& t) { })
  {}

private:
  boost::function< void( const int& )> action_;
};

I know that one workaround to the problem is to move the action_ initialization in the constructor body, instead of initialization list, like in the code below:

template< typename T>
struct A
{
  A()
  {
    action_ = [&]( const T& t) { };
  }

private:
  boost::function< void( const T& )> action_;
};

... but I want to avoid such workaround.

Did anybody encountered such situation? Is any explanation/solution to this so called syntax error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

紫瑟鸿黎 2024-12-17 23:16:04

Visual C++ 2010 中 lambda 的实现有问题吗?这是我对解释的最佳猜测。

不过,我很好奇在这种情况下通过引用捕获作用域变量会做什么......什么都没有?

Broken implementation of lambdas in Visual C++ 2010? That's my best guess for an explanation.

Although, I'm intrigued what capturing scope variables by reference does in this situtation... Nothing?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文