如何拥有一个带有指向非静态成员函数指针的变量的结构?

问题描述 投票:0回答:1

我正在创建一个与神经网络相关的项目。当获得输出时,我想让一个神经元调用所有先前神经元的“ReturnValue”函数。我创建了一个具有上述功能的神经元类。我希望能够将这些函数指针存储在一个结构中(将其与其他一些适用的数据值配对),然后将该结构存储在一个向量中。总而言之,对于前一层中的每个神经元,向量中都会有一个条目。每个条目都是一个包含函数指针和其他一些内容的结构。我的问题是我无法首先获得指向该函数的指针。下面是一些代码来说明。

#include <iostream>
#include <vector>

struct previous_neuron_struct {
    double weight;
    double (*funcPtr)(); //I think that this is correct
};

class neuron {
public:
    double value;
    std::vector<previous_neuron_struct> previous_neurons_vector;

    double Return_Value() {
        return value;
    }
};

int main() {
    neuron neuron1;
    neuron neuron2;
    //I know that it would be easier to avoid pointers, but this better illustrates the environment of the actual use case.
    previous_neuron_struct* temp = new previous_neuron_struct;
    temp->weight = 0.5;
    temp->funcPtr = neuron2.Return_Value; //<- Problem is here

//Rest of code
}

第 25 行是有问题的行。我遇到的星号或与号的组合都不允许我将 Neuron2.Return_Value() 的地址(而不是返回值)放入 temp->funcPtr 中。此示例代码现在将向我提供 Visual Studio 错误代码 0300:

a pointer to a bound function may only be used to call the function
。但与我在一些教程网站上看到的稍微不同的组合,
neuron2.*Return_Value;
我得到了
Identifier "Return_Value" is undefined
。谢谢

c++ neural-network
1个回答
0
投票

声明和调用成员函数指针的语法与普通指针不同。语法如下所示:

struct previous_neuron_struct {
    double weight;
    double (neuron::*funcPtr)();  //syntax for declaring member function pointer 
};
int main() {
    //other code as before
    temp->funcPtr = &neuron::Return_Value; //works now
}

工作演示

© www.soinside.com 2019 - 2024. All rights reserved.