2015-06-05 14 views
8

Làm việc với mã nguồn bên dưới (đó là mã nguồn mở) và tôi chưa bao giờ thấy dấu ngoặc đơn sau tên biến. UDefEnergyH chắc chắn là một biến có thể được nhìn thấy trong dòng 1. Bất cứ ai có thể cho tôi biết những gì các dấu ngoặc đơn đang làm gì? Không thực sự biết làm thế nào để Google này. Cảm ơn.Dấu ngoặc đơn sau tên biến 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)); 
} 

Và nó được khai báo ở đây trong file header:

G4PhysicsOrderedFreeVector UDefEnergyH; 
+2

điều hành quá tải –

+1

Trên thực tế không có bối cảnh thêm chúng tôi có thể không có khả năng trả lời câu hỏi này. Những gì @MohitJain đề xuất chắc chắn là một lời giải thích có thể là –

+1

'UDefEnergyH' là một thể hiện của một đối tượng. 'UDefEnergyH (0)' gọi toán tử gọi hàm quá tải 'UDefEnergyH :: operator() (std :: size_t i)'. – tmlen

Trả lời

7

Có vẻ operator() bị quá tải cho tyupe của UDefEnerfyH.

Một cách để làm điều này là 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, hoàn toàn quên rằng đó là một điều. Cảm ơn, đó là nó. Tôi đánh dấu nó như một câu trả lời hay nhất ngay khi SO cho phép tôi. –

+0

Nó cũng không phải là nó thực sự là một con trỏ hàm? =) – Mints97

+0

@ Mints97 Không vì dòng 'UDefEnergyH.GetLowEdgeEnergy' trong mã. –

0

Đây là những gì được gọi là khởi tạo trực tiếp, trong đó đầu tiên xây dựng các đối tượng với '0' như một tham số ngay lập tức, và sau đó gán nó vào đầu tiên chỉ mục của mảng vals.

+0

Bạn có nghĩa là mảng vals – Mints97

+0

Có cảm ơn bạn: P – TheUndead96

1

Dường như bạn đang đề cập đến trường trong lớp G4SPSEneDistribution. Loại của nó là G4PhysicsOrderedFreeVector. Và có một cái nhìn tại members here của nó. Như bạn có thể thấy có operator() overloaded và dường như đây là những gì được gọi trên dòng thứ hai. Nó không phải là rất dễ dàng để tìm hiểu những gì mà không, nhưng nếu bạn có một cái nhìn tại các bình luận trong file header for G4PhysicsVector, bạn sẽ thấy:

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 []. 
Các vấn đề liên quan