相关疑难解决方法(0)

如何使用枚举类作为一组标志?

假设我有一组标志和类似这样的类:

/// <summary>Options controlling a search for files.</summary>
enum class FindFilesOptions : unsigned char
{
    LocalSearch = 0,
    RecursiveSearch = 1,
    IncludeDotDirectories = 2
};

class FindFiles : boost::noncopyable
{
    /* omitted */
public:
    FindFiles(std::wstring const& pattern, FindFilesOptions options);
    /* omitted */
}
Run Code Online (Sandbox Code Playgroud)

我希望调用者能够选择多个选项:

FindFiles handle(Append(basicRootPath, L"*"),
    FindFilesOptions::RecursiveSearch | FindFilesOptions::IncludeDotDirectories);
Run Code Online (Sandbox Code Playgroud)

是否可以使用C++ 11以强类型方式支持它enum class,或者我是否必须恢复为无类型枚举?

(我知道调用者可以static_cast使用底层类型并static_cast返回,但我不希望调用者必须这样做)

c++ c++11

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

如何让enum类使用'bit-or'功能?

我通常使用enum'bit-or'或|一起允许对象有一些选项.如何让enum类使用'bit-or'功能?

c++ enum-class

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

对于枚举,替换失败不是错误(SFINAE)

有没有办法使用替换失败不是枚举的错误(SFINAE)?

template <typename T>
struct Traits
{
}
template <>
struct Traits<A>
{
};
template <>
struct Traits<B>
{
  enum
  {
     iOption = 1
  };
};

template <T>
void Do()
{
  // use Traits<T>::iOption
};
Run Code Online (Sandbox Code Playgroud)

然后,Do<B>();工作和Do<A>();失败.但是,当iOption不存在时,我可以提供默认行为.所以我将Do to DoOption的一部分分开了.

template <typename T, bool bOptionExist>
void DoOption()
{
  // can't use Traits<T>::iOption. do some default behavior 
};
template <typename T>
void DoOption<T, true>()
{ 
  // use Traits<T>::iOption
};
template <T>
void Do()
{
  // 'Do' does not use …
Run Code Online (Sandbox Code Playgroud)

c++ traits sfinae

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

标签 统计

c++ ×3

c++11 ×1

enum-class ×1

sfinae ×1

traits ×1