Как мне сделать конструктор, который принимает любой примитивный тип и преобразует в int в c ++?

0

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

Моя программа использует только int, поэтому мне нужно принять любой примитивный тип данных в конструкторе и преобразовать его в int.

Теги:
int
constructor
primitive

2 ответа

5

Вы можете использовать конструктор шаблона:

struct Foo
{
  template <typename T>
  explicit Foo(const T& x) :i(x) {}
 private:
  int i;
};
  • 0
    На самом деле это не критика, а лишь предположение, поскольку он сказал, что вы можете использовать только примитивы is_fundamental
  • 1
    @aaronman Я думаю, что is_arithmetic подойдет лучше. нет смысла преобразовывать void в int (или даже пытаться).
Показать ещё 2 комментария
1

Вы можете использовать SFINAE, чтобы вызвать ошибку компиляции, если тип не может быть преобразован в int так...

template<class T>
MyConstructor(const T& x, typename std::enable_if<std::is_convertible<T, int>::value>::type* = nullptr)
{
    int myint = static_cast<int>(x);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню