C++ 在哪里可以找到一个例子,说明;开关";运算符是否可以由一系列函数替换?
我需要一个函数,它可以生成一些阴影:C++ 在哪里可以找到一个例子,说明;开关";运算符是否可以由一系列函数替换?,c++,qt,C++,Qt,我需要一个函数,它可以生成一些阴影: typedef const bool (myClass::*DecoderFactory) (void); DecoderFactory * decoderFactory = new DecoderFactory[1]; QVector<DecoderFactory> * decoderFunctions = new QVector<DecoderFactory>; decoderFactory[0] = &MyClass
typedef const bool (myClass::*DecoderFactory) (void);
DecoderFactory * decoderFactory = new DecoderFactory[1];
QVector<DecoderFactory> * decoderFunctions = new QVector<DecoderFactory>;
decoderFactory[0] = &MyClass::do0;
decoderFunctions->push_back(&MyClass::do0);
decoderFunctions->push_back(&MyClass::do1);
...
const bool someFunction(const short int code)
{
...
decoderFactory[0] = decoderFunctions->value(code);
if (!(this->*decoderFactory[0])()) return false;
return true;
}
const bool do0()
{
//do some
}
const bool do1()
{
//do some
}
...
??我怎么能不使用一个元素数组,这明显的像S**ToCalgs:< P>如果你使用C++容器和C++函数包装器,它可以变得更容易:
struct MyClass
{
typedef std::function<bool()> DecoderFactory;
std::vector<DecoderFactory> decoderFunctions;
MyClass() {
decoderFunctions.push_back(std::bind(&MyClass::do0, this));
decoderFunctions.push_back(std::bind(&MyClass::do1, this));
//...
}
const bool someFunction(const short int code)
{
return decoderFunctions[code /*Did you mean CODE here instead of 0?;)*/]();
}
const bool do0()
{
//do some
}
const bool do1()
{
//do some
}
};
struct MyClass
{
typedef std::函数解码器工厂;
std::矢量解码函数;
MyClass(){
decoderFunctions.push_back(std::bind(&MyClass::do0,this));
decoderFunctions.push_back(std::bind(&MyClass::do1,this));
//...
}
常量布尔函数(常量短整数代码)
{
return decoderFunctions[code/*您是指这里的code而不是0?;)*/]();
}
const bool do0()
{
//做一些
}
const bool do1()
{
//做一些
}
};
为什么你有DecoderFactory*DecoderFactory=newdecoderfactory[1]代码>?为什么需要这样做呢?到目前为止,我发现C和C++函数指针的最佳解释是:“添加:问题已经解决”,你应该把它作为答案。我已经把它从问题中删掉了,你仍然可以看到你在上写的东西。我真的不建议删除你的问题——把你学到的东西作为答案与未来的读者分享。
struct MyClass
{
typedef std::function<bool()> DecoderFactory;
std::vector<DecoderFactory> decoderFunctions;
MyClass() {
decoderFunctions.push_back(std::bind(&MyClass::do0, this));
decoderFunctions.push_back(std::bind(&MyClass::do1, this));
//...
}
const bool someFunction(const short int code)
{
return decoderFunctions[code /*Did you mean CODE here instead of 0?;)*/]();
}
const bool do0()
{
//do some
}
const bool do1()
{
//do some
}
};