相关疑难解决方法(0)

是否有可能使作用域枚举("枚举类")在上下文中可转换为bool?

让我说我有

enum class Flags : std::uint16_t
{
    None = 0,
    A    = 0x0001,
    B    = 0x0002,
    C    = 0x0004
}

inline Flags operator|(Flags lhs, Flags rhs)
{
    return static_cast<Flags>(static_cast<std::uint16_t>(lhs) | static_cast<std::uint16_t>(rhs));
}

inline Flags operator&(Flags lhs, Flags rhs)
{
    return static_cast<Flags>(static_cast<std::uint16_t>(lhs) & static_cast<std::uint16_t>(rhs));
}

inline Flags operator|=(Flags& lhs, Flags rhs)
{
    return lhs = lhs | rhs;
}

inline Flags operator&=(Flags& lhs, Flags rhs)
{
    return lhs = lhs & rhs;
}
Run Code Online (Sandbox Code Playgroud)

是否有可能使枚举类在上下文中可转换为bool以允许某人执行

Flags f = /* ... */;
if …
Run Code Online (Sandbox Code Playgroud)

c++ enums enum-class

6
推荐指数
1
解决办法
757
查看次数

C++模板不接受迭代器

我正在重新学习C++,并开始尝试一个简单的算法:QuickSort.我的功能有这个签名:

template <class T>
void QSort(typename std::vector<T>::iterator begin, typename std::vector<T>::iterator end)
Run Code Online (Sandbox Code Playgroud)

它在我的主要功能中被调用:

int main()
{
    std::vector<int> unsort({56,32,11,45,67,81,12,5});
    std::vector<int>::iterator b=unsort.begin();
    std::vector<int>::iterator e=unsort.end();
    QSort(b, e);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并给出了这个错误:

C:\Users\Deus\Projects\QSort\main.cpp||In function 'int main()':|
C:\Users\Deus\Projects\QSort\main.cpp|49|error: no matching function for call to 'QSort(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >&)'|
||=== Build finished: 1 errors, 0 warnings ===|
Run Code Online (Sandbox Code Playgroud)

似乎编译器无法解析T应该是什么.有没有办法做我正在尝试做的事情,或者我应该将参数声明为类型T,并使用由此产生的不确定性?

c++ templates iterator quicksort

1
推荐指数
1
解决办法
318
查看次数

标签 统计

c++ ×2

enum-class ×1

enums ×1

iterator ×1

quicksort ×1

templates ×1