我想寫性病布爾轉換操作符:: bitset的超載非會員轉換爲BOOL操作
我想:
template<size_t size>
operator bool(std::bitset<size> & b)
{
return b.any();
}
,但我從拿到
error C2801: 'mynamespace::operator bool' must be a non-static member
我的視覺工作室。
但是,當我擡頭C2801 explanation它說,關於轉換操作符沒有(僅約=, - > [],())
因此,是否有可能以某種方式寫「轉化的std :: bitset的爲bool運營商?」
(我不能叫b.any()
在我的if語句,因爲相同的代碼必須運行時的std :: bitset的替換籤名或東西
typedef std::bitset<x> Bitset;
//typedef unsigned Bitset;
所以理想的語法會像:
Bitset b = whatewer;
if(b)
doStuff();
)
如果超載是不可能的,什麼是推薦的解決辦法?
到目前爲止,我使用它像:
if(b == Bitset(0))
doStuff();
,但我不喜歡它。
謝謝
這是一個有趣的問題。我不知道有什麼直接的方式去做你的建議。可能不存在一個。如你所知,麻煩的是從轉換的類型和轉換爲的類型都不是用戶定義的。編譯器不希望讓您在未創建的類型之間添加新的implict轉換。您可能必須定義並顯式調用您自己的函數* make_bool()。*至少如果您內嵌函數,它應該在運行時與內置轉換一樣高效;但你不會得到隱式轉換,對嗎? – thb 2012-03-28 18:56:55