我正在尝试定义一个图,其中顶点类是用模板定义的。然后如何在另一个类中定义指向此模板化顶点的指针。
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/