Я делаю программу, где мне нужно объявить конструктор, который может принимать различные примитивные типы, такие как 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);
}