Я хочу определить универсальный класс в c ++, который позволяет выполнять мой алгоритм для любых данных.Проблема в том, что эти данные могут быть любыми (например, вектор с плавающей точкой, график и т. Д.).Можно ли сказать в моем классе, что манипулируемые данные имеют тип T, который может быть чем угодно?Тогда пользователь моего класса должен будет реализовать некоторые методы моего класса относительно манипулирования своими данными (например, в зависимости от своих данных он определяет, как сделать сумму двух данных и т. Д.)
Редактировать:
Как можно создать экземпляр шаблона класса и вызвать его метод?У меня возникает ошибка, когда я делаю:
MyClass<int, int> tst();
tst.test(3, 4); // or even with tst.test<int, int>(3, 4);
Ошибка: запрос на член 'test' в '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()
{
// ...
}