Как сравнить значения с шаблонами и повысить в C ++? - PullRequest
0 голосов
/ 02 мая 2019

Я создал шаблонную функцию, в которую можно поместить любой тип. Теперь это правда, что эта функция всегда будет работать. Если тип T является int, int всегда выходит из функции. Если строка входит, строка выходит.

Теперь я только что посмотрел документацию по бусту. Повышение означает, что я должен использовать BOOST_AUTO_TEST_CASE_TEMPLATE.

Допустим, у меня следующая ситуация:

BOOST_AUTO_TEST_SUITE (MyTestSuite)

typedef boost :: mpl :: list <int, long, short, double, float, std :: string> TestTypes;

BOOST_AUTO_TEST_CASE_TEMPLATE (MyTestCase, T, TestTypes)
{
  // These three values ​​will be separated by ',' and can be accessed seprately thanks to their individual getters.
  std :: string input = "5,6,7";
  Myclass <T> myClass (input);

BOOST_TEST (myClass.getFirst() == 5);
BOOST_TEST (myClass.getSecond() == 6);
BOOST_TEST (myClass.getThird() == 7);
}

BOOST_AUTO_TEST_SUITE_END()

Как видите, я не хочу проверять, верный ли это тип, который я получаю, но совпадает ли возвращаемое значение со значениями, которые я дал. Так что, если я даю 5 и тип double, то мой класс делает его 5,00. Мой чек в настоящее время не делает этого. Как я могу убедиться, что номер, который я хочу проверить, всегда совпадает с номером, который я даю? Это может показаться немного сложным, но если вам нужна дополнительная информация, я отредактирую это сообщение.

И скажем, это работает. Затем я хочу использовать минимальное и максимальное значение этого типа в качестве входных данных. Как я могу это сделать? Как получить минимальное и максимальное значение T?

1 Ответ

1 голос
/ 02 мая 2019

Вы можете использовать decltype и черты stl:

BOOST_CHECK(std::is_same<T, decltype(myClass.getFirst())>::value);

Затем я хочу использовать минимальное и максимальное значение этого типа в качестве входных данных.Как мне это сделать?

с использованием std :: numeric_limits

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