std::string test = "ABC";
выполняет неявное приведение, но это не происходит при вызове функции. Попробуйте myGraph3.AddEdge(std::string("A"),std::string("B"));
.
Перегрузка вызова функции путем определения другой функции, как в
void AddEdge(_Ty vLevt, _Ty vRight) {
this->AddEdge((VertexType) vLevt, (VertexType) vRight);
}
помогает.
Другая проблема с вашим кодом (по крайней мере, для gcc) заключается в том, что вы используете один и тот же параметр _Ty
в двух вложенных объявлениях шаблонов. Полный, правильный код, который работает для меня:
#include <map>
#include <list>
template <typename _Ty>
class Graph {
private:
template <typename _Tyv>
class Vertex {
public:
Vertex(_Tyv in) : m_Label(in) {
}
~Vertex() {
}
private:
_Tyv m_Label;
protected:
};
public:
typedef Vertex<_Ty> VertexType;
typedef std::list<VertexType> AdjListType;
typedef std::map<VertexType,AdjListType> GraphType;
public:
Graph(bool bType = false) : m_Type(bType) {
}
~Graph() {
}
void AddEdge(VertexType vLevt, VertexType vRight) {
}
void AddEdge(_Ty vLevt, _Ty vRight) {
this->AddEdge((VertexType) vLevt, (VertexType) vRight);
}
private:
// true if bidirectional
// false if unidirectional.
bool m_Type;
GraphType m_Graph;
protected:
};