Search code examples
c++typesprimitive

Is it possible to describe a subtype of some primitive type?


Consider the double primitive type. Let we declare function as the following:

void foo(double);

Is it possible to describe a user-defined type which can be passed to foo as parameter?


Solution

  • Of course, though not through actual inheritance but by simulating it with an implicit conversion:

    #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)

    Whether this is a good idea is another question. I dislike implicit conversions in general so make sure you really need this before using it.