我想在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