相关疑难解决方法(0)

基本枚举类继承

是否有一种模式可以从C++中的另一个枚举继承枚举?

像这样的东西:

enum eBase 
{
   one=1, two, three
};


enum eDerived: public eBase
{
   four=4, five, six
};
Run Code Online (Sandbox Code Playgroud)

c++ enums

72
推荐指数
4
解决办法
6万
查看次数

模板化虚拟功能

我们知道C++不允许在类中使用模板化虚函数.任何人都明白为什么会有这种限

c++

6
推荐指数
2
解决办法
3074
查看次数

使用不同的模板参数在列表项上调用参数化方法

我正在尝试存储和操作具有不同参数类型的模板类对象列表; 模板类有两个parametrised方法,一个返回参数类型和一个空隙一个接受它作为输入.

更具体地说,我有一个模板类,定义如下:

template<typename T>
class Test
{
public:
    virtual T a() = 0;
    virtual void b(T t) = 0;
};
Run Code Online (Sandbox Code Playgroud)

和它的不同规格,如:

class TestInt : public Test<int>
{
public:
    int a() {
        return 1;
    }
    void b(int t) {
        std::cout << t << std::endl;
    }
};

class TestString : public Test<std::string>
{
public:
    std::string a() {
        return "test";
    }
    void b(std::string t) {
        std::cout << t << std::endl;
    }
};
Run Code Online (Sandbox Code Playgroud)

我希望能够在一个列表中存储两者的不同对象TestIntTestString键入并循环调用一个方法作为另一个方法的输入,如:

for (auto it …
Run Code Online (Sandbox Code Playgroud)

c++ templates boost boost-any

5
推荐指数
1
解决办法
137
查看次数

将虚方法作为接收迭代器的模板

我知道不能在 C++ 中使用虚拟方法的模板(反之亦然),例如这里这里讨论的。不幸的是,在我的情况下,我不确定如何处理该限制。

我们有一个包含方法模板的类模板:

template <class T>
class BeliefSet : public Belief<T>
{
private:
    std::vector<T> m_Facts;

public:
    template <class Iter>
    void SetFacts(Iter IterBegin, Iter IterEnd, bool Append = false)
    {
        if(!Append)
        {
            m_Facts.clear();
        }
        m_Facts.insert(m_Facts.end(), IterBegin, IterEnd);
    }
};
Run Code Online (Sandbox Code Playgroud)

该方法SetFacts()应该能够为 STL 容器接收两个输入迭代器,这就是我们在这里使用方法模板的原因。

现在我想让这个方法成为SetFacts()虚拟的,这在 C++ 中是不可能的,目前编写这段代码的方式。那么处理这种情况的典型方法是什么?

c++ templates virtual-functions c++11

5
推荐指数
1
解决办法
187
查看次数

如何模拟方法模板的虚拟性

我有一个类层次结构,我想引入一个方法模板,就像它是虚拟的一样.例如一个简单的层次结构:

class A {
  virtual ~A() {}

  template<typename T>
  void method(T &t) {}
};

class B : public A {
  template<typename T>
  void method(T &t) {}
};
Run Code Online (Sandbox Code Playgroud)

然后我创建对象B:

A *a = new B();
Run Code Online (Sandbox Code Playgroud)

我知道我可以获取存储在类型atypeid(a).B::method当我知道类型时,如何动态调用正确的?我可能有这样的情况:

if(typeid(*a)==typeid(B))
    static_cast<B*>(a)->method(params);
Run Code Online (Sandbox Code Playgroud)

但我想避免有这样的条件.我正在考虑创建一个std::mapwith typeid作为一个键,但我会把它作为一个值?

c++ polymorphism templates

4
推荐指数
2
解决办法
1113
查看次数