如何在c ++中将函数作为指针调用?

时间:2015-04-25 17:30:56

标签: c++ arrays class pointers

所以我使用像这样的结构数组:

struct node
{
  char* name;
  int   value;
};

node *nodeArray = new node*[50];

我试图从数组中调用一个函数,这样我就可以搜索这样的元素:

struct node* newNode;
newNode = nodeArray->find(name);

如果name是char *,那么一旦找到名称,它就会返回指向数组中节点的指针。

我如何创建一个类来从数组中调用find函数?

2 个答案:

答案 0 :(得分:-1)

如果你坚持使用节点数组类,这就是我解决它的方法。 请注意,我假设node的声明与原始帖子相同。

#include <vector>

class NodeArray
{
public:
    explicit NodeArray(size_t length)
        : nodes_(length)
    {}

    Node* find(const char* name){
        for (size_t i = 0; i != nodes_.size(); ++i){
            if (0 == strcmp(nodes_[i].name, name)){ // strcmp is not pretty though.
                return &(nodes_[i]);
            }
        }
        return NULL;
    }

    // TODO: add methods for filling/accessing the nodes..

private:
    std::vector<node> nodes_;
};

int main()
{
    NodeArray my_nodes(50);
    // do stuff
    node* some_node = my_nodes.find("some");
    if (some_node) { /* ... */ }
}

答案 1 :(得分:-1)

你可以使用这个小&#34; hack&#34;。它会起作用,因为NodeArray没有数据成员且没有虚函数,因此您只需将第一个node地址转换为指向NodeArray的指针并调用find函数。 Find函数将第一个节点地址作为this指针。

#include <cstring>
#include <iostream>

struct node
{
  char* name;
  int   value;
};

class NodeArray {

public:

    node* find(const char* name, int len) {

        node* current = (node*)this;

        for (int i = 0; i < len; current++) {

            if (current->name && !strcmp(current->name, name)) return current;

        }

        return nullptr;
    }

    node* get(int index) {

        return ((node*)this) + index;

    }

};

int main(int argc, char * argv[]) {

    NodeArray* node_array = (NodeArray*) (new node[50]);

    node_array->get(10)->name = "blabla";

    if (node_array->find("blabla", 50)) {

        std::cout << "FOUND!";

    }

    delete [] ((node*)node_array);

    return 0;

}