Вопросы

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

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

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

Читать:
Понимание терминологии C, взгляд для пустышек

Вот такая у меня проблема. Есть ли у вас какие-либо предложения, чтобы обойти это?   —  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

Похожие записи

MongoDB — не авторизован в общем кластере, несмотря на роль atlasAdmin

admin

Удалите файлы внутри подпапки, находящейся внутри корзины на amazon s3

admin

Необходимость разделения файлов YAML для конвейеров

admin

Использование разных учетных данных aws в конвейере Bitbucket

admin

Канал async не найден! в Спартаке Ленивая загрузка компонентов CMS

admin