2015-06-05 17 views
8

Praca z poniższym kodem źródłowym (to jest open source) i nigdy nie widziałem nawiasów po nazwie zmiennej. UDefEnergyH jest zdecydowanie zmienną, jak widać w linii 1. Czy ktoś może mi powiedzieć, co robi ten nawias? Naprawdę nie wiem, jak to zrobić w Google. Dzięki.Nawias po nazwie zmiennej C++

bins[0] = UDefEnergyH.GetLowEdgeEnergy(size_t(0)); 
vals[0] = UDefEnergyH(size_t(0)); //Don't know what this does??? 
sum = vals[0]; 
for (ii = 1; ii < maxbin; ii++) { 
    bins[ii] = UDefEnergyH.GetLowEdgeEnergy(size_t(ii)); 
    vals[ii] = UDefEnergyH(size_t(ii)) + vals[ii - 1]; 
    sum = sum + UDefEnergyH(size_t(ii)); 
} 

I tu jest zadeklarowana w pliku nagłówkowym:

G4PhysicsOrderedFreeVector UDefEnergyH; 
+2

Operator przeciążenie –

+1

Właściwie bez dodatkowego kontekstu możemy nie być w stanie Odpowiedz na to pytanie. To, co proponuje @MohitJain, jest zdecydowanie jednym możliwym wytłumaczeniem. –

+1

'UDefEnergyH' jest instancją obiektu. 'UDefEnergyH (0)' wywołuje swojego przeciążonego operatora wywołania funkcji 'UDefEnergyH :: operator() (std :: size_t i)'. – tmlen

Odpowiedz

7

Wydaje operator() jest przeciążony dla tyupe z UDefEnerfyH.

Jednym ze sposobów, aby to zrobić jest this solution

#include <iostream> 
using namespace std; 

struct MJ { 
    void GetLowEdgeEnergy(size_t arg) { 
     cout << "GetLowEdgeEnergy, arg = " << arg << endl; 
    } 
    void operator()(size_t arg) { 
     cout << "operator(), arg = " << arg << endl; 
    } 
}; 

int main() { 
    MJ UDefEnergyH; 
    UDefEnergyH.GetLowEdgeEnergy(42); 
    UDefEnergyH(42); 
    return 0; 
} 
+1

Wow, zupełnie zapomniałem, że to coś. Dzięki, to było to. Zaznaczę to jako najlepszą odpowiedź, jak tylko pozwoli mi na to SO. –

+0

Czy nie jest również możliwe, że jest to wskaźnik funkcji? =) – Mints97

+0

@ Mints97 Nie z powodu linii 'UDefEnergyH.GetLowEdgeEnergy' w kodzie. –

0

To jest to, co jest znane jako bezpośredniego inicjalizacji, w którym najpierw konstruuje przedmiot z „0” jako natychmiastowego parametru, a następnie przypisuje go do pierwszego indeks tablicy vals.

+0

Masz na myśli tablicę z tablicami – Mints97

+0

Tak, dziękuję: P – TheUndead96

1

Wygląda na to, że odnosisz się do pola w klasie G4SPSEneDistribution. Jego typ to G4PhysicsOrderedFreeVector. I spójrz na jego members here. Jak widać, jest operator() overloaded i podobno jest to, co jest wywoływane w drugiej linii. To nie jest bardzo proste, aby dowiedzieć się, co to robi, ale jeśli spojrzeć na komentarzu w pliku nagłówkowym for G4PhysicsVector, widać:

00100   // Returns simply the value in the bin specified by 'binNumber' 
00101   // of the dataVector. The boundary check will not be Done. If 
00102   // you want this check, use the operator []. 
Powiązane problemy