我主要是一個.NET程序員,工作在C++項目上,並試圖確定處理使用Action和Function模板類型的委託的等效方法。我在.NET代碼中使用代理作爲事件和回調。我的C++項目使用智能指針和與C#程序相同的代理設計模式。處理這種情況的最佳方法是什麼?我不清楚如何傳遞和維護一個函數指針,該函數指針也跟蹤智能指針並潛在地刪除底層對象,因爲事件容器使用弱引用。圖書館需要是多平臺的,因此使用CLR不幸是不可取的。當C++使用智能指針時,C#委託相當於
4
A
回答
1
你在找什麼是綁定到現有對象的方法指針,就是這樣嗎?
你應該看看boost::bind。如果您的環境支持它,如果它支持C++ 11,則還可以使用std::tr1::bind
或甚至std::bind
。
這說明你要的是這個例子:
struct X
{
bool f(int a);
};
X x;
shared_ptr<X> p(new X);
int i = 5;
bind(&X::f, ref(x), _1)(i); // x.f(i)
bind(&X::f, &x, _1)(i); //(&x)->f(i)
bind(&X::f, x, _1)(i); // (internal copy of x).f(i)
bind(&X::f, p, _1)(i); // (internal copy of p)->f(i)
最後兩個例子是很有趣,他們生產的「自足」的函數對象。綁定(& X :: f,x,_1)存儲x的副本。 bind(& X :: f,p,_1)存儲p的一個副本,並且由於p是一個boost :: shared_ptr,函數對象保留對其X實例的引用並且即使在p超出作用域時仍然有效或重置()。
爲boost::bind
,std::tr1::bind
和std::bind
之間的差異,我讓你看this other question on SO.
0
在看看: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
這也將解釋爲什麼在C++中的代表是有點棘手。這個圖書館是我讀過的遊戲開發書中推薦的(所以我假設它非常快)。
相關問題
- 1. Qt智能指針相當於Boost :: shared_ptr?
- 2. C#事件+ =委託{}相當於在VB.NET
- 3. 相當於智能指標
- 4. C++智能指針
- 5. 當使用指針用C
- 6. 相當於C#空在託管C++
- 7. 如何使用C++智能指針?
- 8. C++ 11:智能指針使用
- 9. C++:實現智能指針
- 10. C++中的智能指針
- 11. C++智能指針表現
- 12. 相當於boost :: shared_array的Qt智能指針?
- 13. C++ - 智能指針 - 在模板中投射智能指針
- 14. C++相當於C
- 15. 的Python相當於指針
- 16. 針對directx的C++智能指針
- 17. 相當於C#
- 18. 使用委託C#
- 19. C# - 使用委託
- 20. C/C++相當於C#System.Net.Mail
- 21. C#相當於OBJ-C的
- 22. Java相當於C#的委託/事件:動態更改事件調用代碼
- 23. 用於C++回調的C#委託
- 24. 將C++函數指針設置爲C#委託
- 25. strtoul相當於C#
- 26. Struct.Pack相當於C#
- 27. C#相當於InStrRev
- 28. httplib相當於C
- 29. C#ULONG_PTR相當於
- 30. C#相當於fprintf
您能否提供C#代碼以供參考? –
你使用什麼樣的智能指針? – Geoffroy
根據情況,智能指針是一個shared_ptr或weak_ptr。 C#代碼非常標準,我不認爲特定的示例會有幫助。 – John