相关疑难解决方法(0)

如何在C++中实现"虚拟模板功能"

首先:我已阅读并且我现在知道在C++中虚拟模板成员函数(但是?)是不可能的.解决方法是将类作为模板,然后在member-function中使用template-argument.

但是在OOP的上下文中,我发现如果该类实际上是一个模板,下面的例子将不会非常"自然".请注意,代码实际上不起作用,但gcc-4.3.4报告:error: templates may not be ‘virtual’

#include <iostream>
#include <vector>

class Animal {
    public:
        template< class AMOUNT >
        virtual void eat( AMOUNT amount ) const { 
            std::cout << "I eat like a generic Animal." << std::endl; 
        }
        virtual ~Animal() { 
        }
};

class Wolf : public Animal {
    public:
        template< class AMOUNT >
        void eat( AMOUNT amount) const { 
            std::cout << "I eat like a wolf!" << std::endl; 
        }
        virtual ~Wolf() { 
        }
};

class Fish : public …
Run Code Online (Sandbox Code Playgroud)

c++ virtual templates

41
推荐指数
5
解决办法
5万
查看次数

扩展枚举?

假设我创建了一个枚举,但最终有人想要添加到枚举,那么一个人做什么?例如:

// blah.hpp

enum PizzaDressing {
    DRESSING_OLIVES = 0,
    DRESSING_CHEESE = 1
};
Run Code Online (Sandbox Code Playgroud)

在我的FunkyPizza课上,可能会有辣椒浇头.

那么如何在不明显修改原始枚举的情况下添加辣椒呢?

谢谢

c++ enums

13
推荐指数
3
解决办法
2万
查看次数

在派生类中扩展枚举

我有一个类层次结构,其中的每个类都有一个异常类,派生在并行层次结构中,因此......

class Base
{
};

class Derived : public Base
{
};

class BaseException : public std::exception
{
   enum {THIS_REASON, THAT_REASON};
};

class DerivedException : public BaseException
{
    // er...what?
};
Run Code Online (Sandbox Code Playgroud)

我想在DerivedException类中扩展枚举类型以包含新值THE_OTHER_REASON,以便DerivedException类可以包含三个值中的任何一个.

首先,我应该这样做吗?这似乎是一种合理的做法吗?如果是这样,我该怎么做呢?如果没有,你会推荐哪些替代品?

编辑:这里建议可能重复,但建议的解决方案是不同的,因为这个问题是C#和C++的问题.

c++ inheritance

12
推荐指数
2
解决办法
2万
查看次数

枚举支持继承

我经常遇到这样的情况:我们创建了一个作用于某些枚举的类,但后来我们派生并希望在不更改基类的情况下向枚举添加更多值。

我从 2009 年看到这个问题: Base enum class继承

但是,我知道 C++11、14、17 中对枚举进行了许多更改。这些更改中的任何一个是否允许将枚举从基类扩展到派生类?

class Base 
{ 
   enum State {STATE_1, STATE_2, STATE_3}; 
};

class Derived : public Base 
{ 
   enum State {STATE_4};
}; 
Run Code Online (Sandbox Code Playgroud)

...我们希望派生有一个枚举来描述它可以处于的状态,即:STATE_1、STATE_2、STATE_3 和 STATE_4。我们真的不想更改基类中的枚举,因为其他派生类可能无法处于 STATE_4 中。我们也不想创建一个新的枚举,因为我们已经在 Base 中为 State 建立了一个枚举。

为了在 8 年后实现这一目标,我们是否仍然使用静态常量值?

class Base 
{ 
   static int STATE_1= 0;
   static int STATE_2= 1;
   static int STATE_3= 2; 
};

class Derived : public Base 
{ 
   static int STATE_4= 3; 
};
Run Code Online (Sandbox Code Playgroud)

enums c++11 c++14 c++17

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

从C++中的枚举派生

是否有可能从枚举中得出,如果是这样的话?

例如:

enum eStandardTypes
{
    Type1 = 0,
    Type2,
    Unknown,
    Count,
};

enum eExtendedTypes : eStandardTypes
{
    Type3 = eStandardTypes::Count,
    Unknown,
    Count,
};
Run Code Online (Sandbox Code Playgroud)

c++ enums c++17

2
推荐指数
1
解决办法
307
查看次数

标签 统计

c++ ×4

enums ×3

c++17 ×2

c++11 ×1

c++14 ×1

inheritance ×1

templates ×1

virtual ×1