объявить вектор с неизвестной точностью - PullRequest
0 голосов
/ 24 марта 2012

Я хочу объявить вектор в моем .h файле, но в зависимости от точности данных, которые я отправляю, я мог бы хотеть, чтобы вектор был типа double, или я мог бы хотеть, чтобы он был типа float .

//tolerances.h

class verySimple{

public:
  verySimple();
  ~verySimple();

  void processTolerances(std::vector<double or float> tolerances);
};

Могу я получить быстрый урок, пожалуйста? Спасибо.

Ответы [ 3 ]

4 голосов
/ 24 марта 2012

Это то, для чего template.

Вы можете сказать template <typename T> class verySimple, а затем void processTolorances(std::vector<T> tolorances); сделать то, что вы хотите.

Вы должны проверить учебник, так как шаблоны имеют много ошибок для непосвященных.

0 голосов
/ 24 марта 2012

Не совсем ясно, чего вы хотите достичь, но, судя по вашему примеру, вам нужна функция, которая может принимать плавающие или двойные векторы.

Вы можете перегружать функции в C ++:

class verySimple{
    public:
      void processTolerances(std::vector<float> tolerances);
      void processTolerances(std::vector<double> tolerances);
};

Тогда будет вызываться соответствующий в зависимости от аргумента.

Или вы можете сделать функцию шаблоном:

template<typename T>
void processTolerances(std::vector<T> tolerances);

Или, если verySimple какЦелое зависит от типа:

template<typename T>
class verySimple{
    public:
      void processTolerances(std::vector<T> tolerances);
};

Какой способ выбора зависит от природы verySimple и processTolerances - общего «лучшего решения» не существует.

0 голосов
/ 24 марта 2012

А если вы новичок в шаблонах, то перед тем, как конвертировать его в шаблон, работайте с чем-то, что не является шаблоном (с плавающей или двойной).Большинство предупреждений и ошибок компилятора менее информативны при использовании шаблонов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...