我有8年的编码经验,但我从未见过运算符[]作为参数传递给函数定义.
例如,以下代码(来自开源项目):
bree::porder(m_root, [] (treenode* node) { delete node; });
Run Code Online (Sandbox Code Playgroud)
在我的编码生涯中,我总是定义[]为操作符重载程序,而不是参数.
那么这个新语法意味着什么呢?
我正在使用Visual Studio 2003附带的编译器.如何更改上面的代码以便在VS 2003中编译?
我需要将用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++ 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)