2015-08-30 42 views
1

的返回值,我想有其功能的接口返回一個bitset:位集合的功能

class IMyInterface 
{ 
public: 
    virtual std::bitset<100> GetBits() = 0; 
}; 

的問題是,我不想強​​迫bitset的大小。所以我覺得我必須使用boost::dynamic_bitset代替:

class IMyInterface 
{ 
public: 
    virtual boost::dynamic_bitset<> GetBits() = 0; 
}; 

我聽說boost::dynamic_bitsetstd::bitset雖然速度較慢。有沒有其他方法可以避免使用dynamic_bitset並且有一個接口返回std::bitset,其大小由實現者決定?

+2

您可以將界面本身作爲模板。 –

回答

3

首先,由於其靜態性,std::bitsetis not considered to be a good solution。除了boost::的東西,你可以使用之類的東西......

template<size_t N> 
class IMyInterface { 
    public: 
     virtual std::bitset<N> GetBits() = 0; 
}; 

但是,這仍然是過於靜態的,不是嗎?那麼,the standards specify that there's an specialization of std::vector<bool>,通常實現爲一個動態的,高效的存儲std::bitset!所以......

#include <vector> 

class IMyInterface { 
    public: 
     virtual std::vector<bool>& GetBits() = 0; 
}; 

編輯地:IMyInterface::GetBits()返回效率目的的參考。

+1

由於我們已經擁有RVO,所以引用不會影響返回值。 –

+0

@πάνταῥεῖ:這不是必要的,也不是由標準強制的*。畢竟,無論返回值優化如何,傳遞參考/指針始終是最便宜的。 – 3442

+1

另一方面,在接口中指定參考返回值會強制執行內部細節。 –