2012-04-03 39 views
7

Tôi có một chức năng với void * là một trong các tham số của nó (khoảng trống được sử dụng như một đối tượng chung). Nhưng để có thể gọi một hàm trong đối tượng chung đó, tôi cần phải cast nó trước, và cho rằng tôi cần phải biết lớp đó là gì. Và tôi muốn biết, là nó có thể vượt qua một lớp học hoặc một số thông tin cho phép tôi để đúc các đối tượng như là một tham số chức năng?Có thể vượt qua một lớp như một tham số cho một hàm trong C++?

+0

là bạn chủ sở hữu của các chức năng nhận void * như một tham số hoặc nó là một phần của một api bên ngoài? –

+0

Tôi là chủ sở hữu của func – XaitormanX

+6

Nó thường là một ý tưởng rất xấu cung cấp một chức năng với void * như là một đầu vào. Có cách tốt hơn để đạt được hành vi chung: sử dụng mẫu hoặc kế thừa. Bạn nên suy nghĩ lại về thiết kế của mình. –

Trả lời

9

Bạn có thể xem bất kỳ cơ hội nào trong số Templates không?

Một ví dụ sẽ là một cái gì đó như

class SomeClass 
{ 
public: 
    template<typename CastClass> 
    void DoSomething(void* someArg) 
    { 
     (CastClass)someArg; 
    } 
}; 

Cách sử dụng:

class A{ }; // Some random test class 

SomeClass test; 
A a; 
test.DoSomething<int>(&a); // The template parameter can be anything. 
          // I just have int to make it a smaller example. 
+0

Nhưng tôi cần chức năng đó để ở trong một lớp học và tôi không thể biến lớp đó thành một mẫu – XaitormanX

+0

@XaitormanX: Xem ví dụ được cập nhật – josephthomas

+0

Cảm ơn bạn. Và nó sẽ được sử dụng như thế nào? – XaitormanX

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