c++ - 指向模板类的指针

标签 c++ templates pointers

我正在尝试定义一个图,其中顶点类是用模板定义的。然后如何在另一个类中定义指向此模板化顶点的指针。

template<class T1, class T2>
class Vertex {
public:
  virtual T1 run(T2) = 0;
};


class Graph {
  std::map<std::string, Vertex*> vertices; // <--- How do I do something like this
  int** adjacency_matrix;
public:
  void run() {
     ...
  }
};

我一直在查看有关 Stack-Overflow 的其他一些问题,常见的建议似乎是使用未模板化的基类,并使用指针并将通用函数放在该类中。 但是,在我的代码中,run() 函数是常用函数,它使用模板作为返回类型。所以我不明白如何使用基类。

有什么想法吗?

最佳答案

没有名为 Vertex 的类,只有类的模板。

简单的方法是使用多态性,因为无论如何你只存储指针:

定义一个基类,所有 Vertex 实例(特化的或非特化的)都继承自该基类。

template<class T1, class T2>
class Vertex : VertexBase {
public:
  virtual T1 run(T2) = 0;
};

struct VertexBase {
  ~VertexBase() = default;
  template<class T1, class T2> T1 run(T2 x) {
    return dynamic_cast<Vertex<T1,T2>&>(*this).run(x);
  }
};

无论如何,也看看 std::function 看看它是否足够好地解决您的问题。

关于c++ - 指向模板类的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376084/

相关文章:

c++ - 如何像普通 C 函数一样使用正确的 'this' 指针调用 C++ 类成员函数? (指向类成员函数的指针)

c++ - 如何在从 tinyxml 生成的 xml 文件顶部添加 !DOCTYPE?

c++ - 如何将 lambda 传递给模板参数

c++ - 有没有办法检测函数是否被覆盖?

c - 只要您永远不取消引用它,持有未对齐的指针是否定义明确?

c - 如何将数组的元素依次插入到另一个数组中?

c++ - try catch 模板类中定义的异常

c++ - 用数组或指针引用函数?

c++ - 为什么 CreateSemaphore 工作时 OpenSemaphore 在 64 位 Windows 7 中总是返回零?

c++ - 在元函数定义中使用 mpl::vector