Я пытаюсь написать оператор BOOL-преобразования для станда :: 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 это ничего не говорит о операторов преобразования (только =, ->, [],())
Итак, можно ли как-то написать «Конверсия станд :: BitSet к BOOL оператор?»
(я не могу назвать b.any()
в моем случае-заявления, так как тот же код должен работать при станд :: BitSet заменяется без знака или что-то
typedef std::bitset<x> Bitset;
//typedef unsigned Bitset;
так идеальный синтаксис будет как:
Bitset b = whatewer;
if(b)
doStuff();
)
Если перегрузка не представляется возможным, что рекомендуемый обходной путь?
до сих пор я использую его как:
if(b == Bitset(0))
doStuff();
, но я не люблю его.
Спасибо
Это интересный вопрос. Я не знаю, какой прямой способ сделать то, что вы предлагаете. Их может не быть. Как вы знаете, проблема в том, что ни тип, ни преобразованный тип, ни преобразованный тип не определяются пользователем. Компилятор не хочет добавлять новые, подразумеваемые преобразования между типами, которые вы не создали. Возможно, вам придется определять и явно вызывать свою собственную функцию * make_bool(). * По крайней мере, если вы * встроите * свою функцию, она должна быть такой же эффективной во время выполнения, как встроенное преобразование; но вы не получите неявное преобразование, не так ли? – thb