On 2020-01-29 11:32, Trey Harris wrote:
On Wed, Jan 29, 2020 at 13:50 ToddAndMargo via perl6-users <perl6-us...@perl.org <mailto:perl6-us...@perl.org>> wrote:

    Why don't use use

    typeMappings[type_index( typeid(char) )] = "char";

Finally, a definition I can work with...

We can treat this as a request for typeid(); the mapping creation and lookup is an implementation detail.

So: the C++ typeid operator works in two modes, static (which happens at compile-time and is inlined) and dynamic (which happens at runtime and is subject to polymorphism). Do you want the static or the dynamic behavior?


I thought that was C not C++, but ...

As variables in Raku get boxed and coerced
all the time, I guess I am asking for dynamic.

I am after what the variable is at the moment I
ask.

Is Raku written in C or C++?

One of the guys on the C group wrote me this:


#include <iostream>
#include <typeindex>
#include <typeinfo>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{
    unordered_map<type_index, string> typeMappings;
    typeMappings[type_index( typeid(char) )]               = "char";
typeMappings[type_index( typeid(unsigned char) )] = "unsigned char";
    typeMappings[type_index( typeid(signed char) )]        = "signed char";
    typeMappings[type_index( typeid(short) )]              = "short";
typeMappings[type_index( typeid(unsigned short) )] = "unsigned short";
    typeMappings[type_index( typeid(int) )]                = "int";
typeMappings[type_index( typeid(unsigned int) )] = "unsigned int";
    typeMappings[type_index( typeid(long) )]               = "long";
typeMappings[type_index( typeid(unsigned long) )] = "unsigned long";
    typeMappings[type_index( typeid(long long) )]          = "long long";
typeMappings[type_index( typeid(unsigned long long) )] = "unsigned long long";
    typeMappings[type_index( typeid(float) )]              = "float";
    typeMappings[type_index( typeid(double) )]             = "double";
    typeMappings[type_index( typeid(long double) )]        = "long double";

    int a, c;
    float b;
    long long d;
    cout << typeMappings[type_index( typeid(a + b) )] << endl;
    cout << typeMappings[type_index( typeid(a + c) )] << endl;
    cout << typeMappings[type_index( typeid(a + d) )] << endl;
}

Reply via email to