Указатели на шаблонный класс

Я пытаюсь определить граф, в котором класс вершины определяется шаблоном. Как затем определить указатель на эту шаблонную вершину в другом классе.

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

Источник: ledsshop.ru

Стиль жизни - Здоровье!