ssb*_*ssb 1 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() {
...
}
};
Run Code Online (Sandbox Code Playgroud)
我一直在寻找关于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);
}
};
Run Code Online (Sandbox Code Playgroud)
无论如何,还要看一看std::function是否能很好地解决你的问题.
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |