2010-07-06 75 views
17

Làm cách nào để đặt thân của hàm tạo tĩnh của một lớp được quản lý bên ngoài khai báo lớp? Cú pháp này có vẻ là compilable, nhưng nó thực sự có nghĩa là constructor tĩnh, hay chỉ là một hàm tĩnh (= not visible outside translation unit)?C++/CLI, hàm tạo tĩnh bên ngoài khai báo lớp

ref class Foo { 
    static Foo(); 
} 

static Foo::Foo() {} 
+0

Điều này có thể giúp bạn: http://www.drdobbs.com/184401941 – fingerprint211b

+0

ngón tay print211b: thấy điều đó. Bài viết này mô tả cách hoạt động, nhưng chúng không đề cập đến cách sử dụng cụ thể này. – liori

Trả lời

18

Vâng, đó là cú pháp chính xác để tạo hàm tạo tĩnh C++/CLI. Bạn có thể biết nó không tạo ra một hàm tĩnh vì đó không phải là cú pháp khai báo hàm hợp lệ. Các hàm phải có kiểu trả về được chỉ định. Ngoài ra, trình biên dịch sẽ khiếu nại rằng Foo() không phải là thành viên của lớp Foo nếu nó không liên kết nó với hàm tạo mà bạn đã khai báo trong định nghĩa lớp.

Bạn có thể kiểm tra khá dễ dàng:

using namespace System; 

ref class Foo { 
    static Foo(); 
    Foo(); 
} 

static Foo::Foo() { Console.WriteLine("Static Constructor"); } 
Foo::Foo() { Console.WriteLine("Constructor"); } 

int main(array<System::String ^> ^args) 
{ 
    Foo ^f = gcnew Foo(); 
    Console.WriteLine("Main"); 
} 

sẽ này đầu ra:

Static Constructor
Constructor
chính

+0

Vâng, cảm ơn. Tôi đã nhận được một lỗi vì cú pháp đó, sau đó tôi nhận thấy nó là do một cái gì đó không liên quan đến contructor tĩnh. – liori

Các vấn đề liên quan