是否有可能描述某种原始类型的子类型?

时间:2014-05-12 10:55:05

标签: c++ types primitive

考虑double基元类型。让我们声明函数如下:

void foo(double);

是否可以描述可以作为参数传递给foo的用户定义类型?

2 个答案:

答案 0 :(得分:7)

当然,虽然不是通过实际的继承,而是通过隐式转换来模拟它:

#include <iostream>

struct MoreDouble
{
   operator double() { return 42.5; }
};

void foo(double x)
{
   std::cout << x << '\n';
}

int main()
{
   MoreDouble md;
   foo(md);
}

// Output: 42.5

Live demo

这是否是一个好主意是另一个问题。我不喜欢一般的隐式转换,所以在使用它之前确保你真的需要它。

答案 1 :(得分:4)

是的,如果您的类型有用户定义的强制转换操作符,则可以这样做。

void x(double){}

class A
{
    public:
    operator double(){return 0;}
};

int main()
{
    A a;
    x(a);
    return 0;
}