Можно ли описать подтип некоторого примитивного типа?

Рассмотрим double примитивный тип. Позвольте нам объявить функцию следующим образом:

void foo(double);

Можно ли описать пользовательский тип, который может быть передан foo как параметр?

3

Решение

Конечно, хотя и не через фактический наследование, но путем симуляции с неявным преобразованием:

#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

(Живая демо)

Является ли это хорошей идеей, это другой вопрос. Мне вообще не нравятся неявные преобразования, поэтому убедитесь, что они вам действительно нужны, прежде чем их использовать.

7

Другие решения

Да, вы можете сделать это, если есть пользователь, определяющий оператор приведения к вашему типу.

void x(double){}

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

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

По вопросам рекламы [email protected]