考虑double
基元类型。让我们声明函数如下:
void foo(double);
是否可以描述可以作为参数传递给foo
的用户定义类型?
答案 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
这是否是一个好主意是另一个问题。我不喜欢一般的隐式转换,所以在使用它之前确保你真的需要它。
答案 1 :(得分:4)
是的,如果您的类型有用户定义的强制转换操作符,则可以这样做。
void x(double){}
class A
{
public:
operator double(){return 0;}
};
int main()
{
A a;
x(a);
return 0;
}