小编Arj*_*jun的帖子

奇怪的C++语法

我有8年的编码经验,但我从未见过运算符[]作为参数传递给函数定义.

例如,以下代码(来自开源项目):

bree::porder(m_root, [] (treenode* node) { delete node; }); 
Run Code Online (Sandbox Code Playgroud)

在我的编码生涯中,我总是定义[]为操作符重载程序,而不是参数.

那么这个新语法意味着什么呢?

我正在使用Visual Studio 2003附带的编译器.如何更改上面的代码以便在VS 2003中编译?

c++ lambda visual-studio-2003 square-bracket visual-c++

8
推荐指数
3
解决办法
782
查看次数

转换初始化列表

我需要将用C++ 0x编写的类转换为在Visual Studio 2008中编译的类.代码使用std :: initializer_list.

以下是代码

template <typename data_type>
class symmatrix
{
public:


    typedef data_type         value_type;
    symmatrix(std::initializer_list<T> const& size, value_type ini = value_type())
      : m_data(0), m_memory(false) { resize(size); *this = ini; }
}
Run Code Online (Sandbox Code Playgroud)

必须转换为VS 2008所理解的旧标准.

我真的很难将100行新的C++代码改为旧的C++.所以,请帮帮我.

c++ initializer-list c++11

6
推荐指数
1
解决办法
395
查看次数

VS 2008中的C++ 0x错误

首先感谢论坛在将用C++ 0x函数编写的函数转换为C++ 03时提供的支持.我还有更多的线要转换.在完成任务之前,我有一个主要的编译错误(在VS 2008中)以修复以下代码.

(错误读作"只允许在全局,名称空间或类范围内使用模板声明")

#include "stdafx.h"

#define EMPTY(x, func)
#define ACTION(x, func) func(x)
#define IFRETURN(x, func) if (!func(x)) { return; }

#define  BIN_TREE_TRAVERSAL(NAME, PRE, IN, POST) \
  template <typename node_t, typename func_t>      \
  void NAME (node_t* proot, func_t const& func)    \
  {                                                \
   if (proot)                                      \
   {                                               \
    PRE(proot, func);                              \
    NAME(proot->left (), func);                    \
    IN(proot, func);                               \
    NAME(proot->right(), func);                    \
    POST(proot, func);                             \
   }                                               \
  }

   BIN_TREE_TRAVERSAL(inorder, EMPTY, ACTION, EMPTY)
   BIN_TREE_TRAVERSAL(preorder, ACTION, EMPTY, EMPTY)
   BIN_TREE_TRAVERSAL(postorder, EMPTY, EMPTY, ACTION) …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
106
查看次数