在我的C++庫中,我有一個類型boost::variant<A,B>
以及許多將此類型作爲輸入的算法。而不是成員函數,我有這種類型的全局函數,如void f(boost::variant<A,B>& var)
。我知道這也可以通過模板來實現,但這不適合我的設計。將成員函數添加到Boost.Variant中
我很精細與這種編程風格:
boost::variant<A, B> v;
f(v);
但一些這個庫的用戶不使用它,因爲Boost.Variant概念是由一個類型定義隱藏,他們感覺就像打電話給v.f()
。
爲了實現這一點,我可以考慮兩種可能性:1)重寫boost::variant
和2)重新實現boost::variant
並添加我自己的成員函數。我不確定這些想法是否好。你能給我一些幫助嗎?還有其他的可能嗎?
3)教育用戶使用非成員函數的好處,在不改變它的情況下擴展類的可用性。 – 2010-03-02 12:52:10
@Mike:我完全同意,但不幸的是,這並不容易 – 2010-03-02 13:16:48
在商業環境中,它通常不是「不容易」,但不可能。 – gimpf 2010-03-02 16:22:00