[c++] vector<int (*)()> - jak się odwołać poprzez iter

0

nie wiedziałem czy to dać tutaj czy do newbie. jeśli nie pasuje tutaj prosiłbym o przeniesienie.

mam vector<int ()()> we. jak się odwołać do funkcji, na które wskazują wskaźniki poprzez vector<int ()()>::iterator in?

vector<int (*)()> we;
...
double sum = 0;
for(vector<int (*)()>::iterator it = we.begin(); it < we.end(); ++i) {
   sum += /*tutaj wywolanie funkcji z it*/ * *w;  // w - wskaznik na jakiegos doubla;
}
0

sum += (*it)() *w;

0

dzięki za pomoc. niestety mam teraz inny problem, nie potrafię przekazać tego wskaźnika do innej funkcji. chyba cos przekombinowałem (jak zwykle zresztą).

wiem, że ten przykładowy kod nie będzie działał poprawnie, ale powinien się chociaż skompilować.

#include <vector>

class A {
  std::vector<int (*)()> we;
  std::vector<double> w;
public:
    int funkcjaZwracajacaInt() {
      double sum =0;
      for(unsigned int i=0; i < we.size(); ++i){
	sum += we[i]() * w[i];
      }
      return sum;
    }
    
    void dodaj(const double& a, int (*wsk)()){
      we.push_back(wsk);
      w.push_back(a);
    }
};

class B {
  std::vector<A> ne;
public:
  B(unsigned int a){
    ne.resize(a);
  }
  unsigned int ilosc() {
    return ne.size();
  }
  
  void polaczZ(B& l) {
    for(unsigned int i=0; i< ne.size(); ++i){
      for(unsigned int j =0; j < l.ilosc(); ++j){
	// blad 
	ne[i].dodaj( 5.4, l.ne[j].funkcjaZwracajacaInt);
      }
    }
  }
};

int main (int argc, char **argv) {
  B warstwa1(3);
  B warstwa2(3);
  
  warstwa2.polaczZ(warstwa1);
  return 0;
}

podczas kompilacji dostaję:

bla.cpp: In member function ‘void B::polaczZ(B&)’:
bla.cpp:34: error: no matching function for call to ‘A::dodaj(double, <unresolved overloaded function type>)’
bla.cpp:15: note: candidates are: void A::dodaj(const double&, int (*)())

może wyjaśnię o co mi chodzi, bo pewnie da się to lepiej rozwiązać. próbuję zrobić prostą sieć neuronową. polacznie pomiędzy warstwami wykombinowałem jak widać. funkcja "funkcjaZwracajacaInt" ma wywoływać siebie dla kazdego neuronu (ne) z warstwy polaczonej.

0

źle chcesz to zrobić. Ty masz tam tablicę wskaźników do FUNKCJI: int ()()
a próbujesz wpakować wskaźnik do METODY: int (A::
)()

1 użytkowników online, w tym zalogowanych: 0, gości: 1