小编sai*_*u78的帖子

c ++,一种遍历树状结构的通用递归模板函数

我尝试使用通用递归函数遍历树状结构,而不是每次为每个结构定义全局的递归函数.

//structure #1
class CA
{
public:
    std::string name;
    std::vector<CA*> vecChild;
};
Run Code Online (Sandbox Code Playgroud)

我用CA创建了一个树

auto root = new CA;
root->name = "root";
root->push_back(new CA);
auto& childA = root->back();
childA->name = "childA";
root->push_back(new CA);
auto& childB = root->back();
childB->name = "childB";
...
Run Code Online (Sandbox Code Playgroud)

我可以使用此宏来遍历此结构,这可以与其他树状结构一起使用.

#define Combinator(obj, combinatorObjToContainer, containerNameOfObj, invokingGetCount, combinatorContainerToIndexingItem, TAnyObject, TAnyContainer, argEnterFunc, argLeaveFunc)\
{\
    std::function<void(TAnyObject, TAnyContainer)> RecursFunc = [&](auto& argObj, auto& argContainer)\
    {\
        argEnterFunc(argObj, argContainer);\
        for(size_t idx=0; idx<argObj combinatorObjToContainer containerNameOfObj invokingGetCount; ++idx)\
        {\
            RecursFunc(argObj, argObj combinatorObjToContainer containerNameOfObj combinatorContainerToIndexingItem [idx]);\
        }\
        argLeaveFunc(argObj, argContainer);\ …
Run Code Online (Sandbox Code Playgroud)

c++ macros templates generic-lambda c++14

5
推荐指数
1
解决办法
227
查看次数

标签 统计

c++ ×1

c++14 ×1

generic-lambda ×1

macros ×1

templates ×1