Я пытаюсь определить граф, в котором класс вершины определяется шаблоном. Как затем определить указатель на эту шаблонную вершину в другом классе.
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() { … } };
Я рассматривал некоторые другие вопросы по Stack-Overflow, общее предложение, похоже, состоит в том, чтобы использовать базовый класс, который не является шаблоном, и использовать для этого указатели и помещать общие функции в этот класс. Однако в моем коде функция run(), которая является общей и использует шаблон для типа возвращаемого значения. Поэтому я не понимаю, как использовать базовый класс.
Любые идеи?
Если функция Vertex::run использует аргументы шаблона и вы хотите сохранить указатели на Vertex без аргументов шаблона, как вы собираетесь вызывать Vertex::run? Что вы собираетесь на это переходить? — person ssb schedule 24.06.2014
Вот такая у меня проблема. Есть ли у вас какие-либо предложения, чтобы обойти это? — person ssb schedule 24.06.2014
C ++ имеет статическую типизацию, поэтому ему необходимо знать тип во время компиляции. Это означает, что ему нужно знать, что такое T2, если вы собираетесь позвонить run(T2). Вы можете объявить несколько карт в Graph, по одной для каждой комбинации аргументов шаблона Vertex, которые вы используете, но это звучит не очень хорошо. Возможно, вам придется пересмотреть свой дизайн и посмотреть, есть ли другой способ решения вашей проблемы. Чего вы пытаетесь достичь? Вы можете задать другой вопрос, более направленный на это. — person ssb schedule 24.06.2014
Как вы собираетесь взаимодействовать с Vertexs, когда они окажутся в Graph, не зная их типа? — person ssb schedule 24.06.2014
Источник: