【发布时间】:2011-11-22 08:17:45
【问题描述】:
基于这个问题:
"enum class" emulation or solid alternative for MSVC 10.0
我想问几件事。假设这段代码:
struct DeletionMode_E
{
static DeletionMode_E const Off;
static DeletionMode_E const DirSize;
static DeletionMode_E const FileNumberSize;
static DeletionMode_E const DirAndFileNumberSize;
operator int const() const { return myVal; }
private:
explicit DeletionMode_E(const int & v) : myVal(v) { }
const int myVal;
};
及其后续定义:
Log4Reconstruction::DeletionMode_E const Log4Reconstruction::DeletionMode_E::Off(0);
Log4Reconstruction::DeletionMode_E const Log4Reconstruction::DeletionMode_E::DirSize(1);
Log4Reconstruction::DeletionMode_E const Log4Reconstruction::DeletionMode_E::FileNumberSize(2);
Log4Reconstruction::DeletionMode_E const Log4Reconstruction::DeletionMode_E::DirAndFileNumberSize(3);
可以这样使用:
void Log4Reconstruction::setDeletionMode( Log4Reconstruction::DeletionMode_E const & delMode_in)
{
std::cout << delMode_in << std::endl;
switch(delMode_in)
{
//case Log4Reconstruction::DeletionMode_E::Off: C2051 case expression not constant
// std::cout << "Off" << std::endl;
// break;
case 1:
std::cout << "File number" << std::endl;
break;
}
}
为什么要调用函数调用运算符?为了解决案例陈述中的“问题”,如何手动调用它?我正在使用 MSVS 2008 没有外部库可用。
【问题讨论】:
标签: c++ enums switch-statement