rub*_*nvb 3 c++ enums struct namespaces c++11
我明白问题标题是模糊的,因此正文:)
我有几个enum用于识别文件类型和其他需要轻松区分的东西.我以前的做法是这样的:
namespace my_namespace
{
namespace fileType
{
enum fileType
{
SOURCE,
HEADER,
RESOURCE
};
}
}
using namespace my_namespace::fileType;
Run Code Online (Sandbox Code Playgroud)
这让我可以定义一个函数:
fileType someFunction( const std::string &someFile, const fileType someType )
{
//...
return fileType::HEADER;
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样定义和比较变量:
fileType type = fileType::SOURCE;
Run Code Online (Sandbox Code Playgroud)
哪个很棒.虽然有一些警告.标题(没有任何using指令)需要加倍预期的枚举名称,让编译器知道你使用的是类型,而不是命名空间:
my_namespace::fileType::fileType soeFunction( const std::string &someFile, const my_namespace::fileType::fileType someType );
Run Code Online (Sandbox Code Playgroud)
哪个看起来很傻,难以阅读,难以理解.此外,MSVC在警告级别1处抱怨使用的非标准扩展(由于fileType示例中的doule ).奇怪的是,海湾合作委员会并没有在最严格的环境下抱怨,但嘿,这是一个不同的故事.
我现在想要以enum一种方式重写我的s(它们是匿名的)包含在结构而不是命名空间中,允许在声明函数时进行单一限定,从而关闭MSVC的警告.但是return在这种情况下如何编写语句.是否绝对有必要提供构造函数/转换运算符,或者有没有办法解决这个问题?
例:
// enum definition
namespace my_namespace
{
struct fileType
{
enum
{
SOURCE,
HEADER,
RESOURCE
};
}
}
using my_namespace::fileType;
// function declaration in header
my_namespace::fileType someFunction( const std::string &s, const my_namespace::fileType type );
// function implementation in .cpp file
using my_namespace::fileType;
fileType someFunction( const string &s, const fileType type )
{
//...(problem is situated below)
return fileType::SOURCE;
}
Run Code Online (Sandbox Code Playgroud)
这说明了我想做的事情.我想避免明确地调用enum struct的构造函数:fileType(fileType::SOURCE)这会让我有双重fileType用途.
谢谢您的帮助!
PS:如果之前已经回答过这个问题,我很抱歉,但是我没有找到谷歌或之前关于这个主题的问题的好选择.
Mat*_* M. 10
我个人使用一个非常简单的技巧:
struct EnumName
{
enum type {
MemberOne,
MemberTwo,
...
};
};
typedef EnumName::type EnumName_t;
// Usage
EnumName_t foo = EnumName::MemberOne;
Run Code Online (Sandbox Code Playgroud)
在C++ 0x中,您可以直接使用作用域枚举器:
enum struct EnunName // note: struct and class equivalent here
{
MemberOne,
MemberTwo,
...
};
// Usage
EnumName foo = EnumName::MemberOne;
Run Code Online (Sandbox Code Playgroud)
这真的很棒:)
注意:scoped enum也不受整体推广的影响,这真的很棒
| 归档时间: |
|
| 查看次数: |
2856 次 |
| 最近记录: |