我正在创建一个程序,我需要声明一个构造函数,它可以接受各种基本类型,例如double
或float
,并将其转换为int
。
我的程序只使用int
,所以我需要在构造函数中接受任何原始数据类型并将其转换为int
。
答案 0 :(得分:5)
您可以使用模板构造函数:
struct Foo
{
template <typename T>
explicit Foo(const T& x) :i(x) {}
private:
int i;
};
答案 1 :(得分:1)
如果类型无法转换为int,则可以使用SFINAE导致编译错误...
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);
}