我想在C++中定义一个允许在任何数据上执行我的算法的泛型类。问题是这些数据可能是任何东西(例如浮点数,图表等)。是否可以在我的课堂上说操纵的数据是T型的,可以是任何东西?然后我的类的用户将必须实现相对我的课的一些方法来操纵他的数据(例如,取决于他的数据,他定义了如何做两个数据的总和,等...)通用抽象类型C++
编辑:
那么如何才能实例化类模板并调用它的方法?我有一个错误,当我做:
MyClass<int, int> tst();
tst.test(3, 4); // or even with tst.test<int, int>(3, 4);
错误:请求部件在“TST”“测试”,其是非类类型的“MyClass的()”
类如果定义为:
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
using namespace std;
using namespace boost;
template<typename T1, typename T2>
class MyClass
{
public:
MyClass();
virtual ~MyClass();
void test(T1 p, T2 s);
protected:
struct NodeData
{
T1 var1;
T2 var2;
int var3;
};
struct EdgeData
{
int var;
};
typedef adjacency_list<setS, setS, undirectedS, NodeData, EdgeData> Graph;
typedef typename Graph::vertex_descriptor NodeDataID;
typedef typename Graph::edge_descriptor EdgeDataID;
typedef typename graph_traits<Graph>::vertex_iterator VertexIterator;
Graph g;
};
template<typename T1, typename T2>
void MyClass<T1, T2>::test(T1 arg1, T2 arg2)
{
NodeDataID nId = add_vertex(g);
g[nId].anything = "but anything is not in struct NodeData !";
g[nId].var1 = arg1;
g[nId].var2 = arg2;
g[nId].var3 = 55;
}
template<typename T1, typename T2>
MyClass<T1, T2>::MyClass()
{
// ...
}
template<typename T1, typename T2>
MyClass<T1, T2>::~MyClass()
{
// ...
}
您需要一个Template类。 –
@Als:A **类模板**,实际上。 (我也混合使用了很多。) –
@DrewDormann Als 当我尝试实例化类模板并调用其方法(仅用于测试时,出现错误)。看我的文章编辑。 – shn