Я создаю программу, где мне нужно объявить конструктор, который может принимать различные примитивные типы, такие как double
или float
и преобразовывать их в int
.
Моя программа использует только int
, поэтому мне нужно принять любой примитивный тип данных в конструкторе и преобразовать его в int
.
Вы можете использовать конструктор шаблона:
struct Foo
{
template <typename T>
explicit Foo(const T& x) :i(x) {}
private:
int i;
};
Вы можете использовать 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);
}
is_fundamental
is_arithmetic
подойдет лучше. нет смысла преобразовыватьvoid
вint
(или даже пытаться).