【问题标题】:C++ Enum Returning Function to be Used in Constructor构造函数中使用的 C++ 枚举返回函数
【发布时间】:2013-04-22 06:37:36
【问题描述】:

我想从函数返回一个枚举值,因为我的构造函数需要创建一个枚举值。

我的班级:

class myBasket{
enum myType {type1, type2, type3} MT;
public:
myBasket(myType thetype) : MT(thetype){} 
}; 

下面的部分是我想要创建的函数,但我不知道如何返回枚举值,所以我只是写它来告诉你我想要什么,因为这是我的问题,也怎么能如果需要,我会在头文件中标识它?

int bSize(int size){
return size;
}

召唤:

new myBasket(bSize(chosen_size));

【问题讨论】:

  • 如果你想让类外的东西能够使用它,你应该在public部分声明myType...

标签: c++ function object constructor enums


【解决方案1】:

c++98(也适用于c++11)

#include <iostream>

class myClass
{
public:
    enum myBasket{one, two, three};

    myBasket bSize(myBasket size){
        return size;
    }

};

int main()
{
    myClass A;

//枚举的名字在c++98中不被认为是作用域 标准::cout

    return 0;
}

c++11

#include <iostream>

class myClass
{
public:
    enum myBasket{one, two, three};

    myBasket bSize(myBasket size){
        return size;
    }

};

int main()
{
    myClass A;
    //only worked on c++11, the enum name work as a scope
    std::cout<<A.bSize(myClass::myClass::one)<<std::endl;


    return 0;
}

您可以在 c++11 中声明枚举的类型并进行前向声明

.hpp

enum class myBasket;

class myClass
{
public:


    myBasket bSize(myBasket size);

};

.cpp

enum class myBasket : int{one, two, three};

注意枚举类不能隐式转换为 int

【讨论】:

    【解决方案2】:

    当你在一个类中进行枚举时,类名就像一个命名空间。

    class MyClass
    {
      enum SomeType
      {
        Val
      };
    };
    
    MyClass::SomeType v = MyClass::Val;
    

    【讨论】:

    • 值得一提的是,这是 C++11 中的新行为。它也没有直接回答这个问题。
    • @jamesdlin 老实说,我几乎不知道他在问什么。我不得不猜测:P
    【解决方案3】:
    enum myType {type1, type2, type3} MT;    
    class myBasket{
    
    public:
    myBasket(myType thetype) : MT(thetype){} 
    }; 
    
    myType bSize(int size){
    return somesize; //cant return the input value so modified
    }
    
    new myBasket(bSize(chosen_size));
    

    【讨论】:

    • 这里不需要new
    猜你喜欢
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多