Boost logo

Boost :

Subject: Re: [boost] [gsoc17] Project1: Static map: Can I implement the competency test in g++-7?
From: Vic Luo (vicluo96_at_[hidden])
Date: 2017-03-10 15:58:30


During the implementation of my static_map, I recently encountered a
problem: how to deal with string types?

For example:

    constexpr auto cmap_str = make_static_map({

        {"abc", 1},

        {"bcd", 2}


    static_assert(cmap_str["abc"] == 1, "test");

In my implementation, KeyType requires

1. constexpr operator==, which is not provided by const char *

2. constexpr hash(const KeyType&). Since there is no such thing in
standard library, I have to implement some in this project.

Currently I would like to use string_view, since it looks like a general
solution for compile-time string with lots of constexpr functions, but I
don't know which of the following designs looks better:

Design A:

        template<typename KeyType,
        typename MappedType,
        typename EqualOp = StaticEqualOp<KeyType>,
        typename HashOp = StaticHashOp<KeyType>>
        class static_map;

        // StaticEqualOp: Specialize StaticEqualOp for those KeyTypes that

        // can construct string_view and use operator== of string_view,

        // otherwise we simply use operator== of KeyType

        // StaticHashOp: size_t operator()(const string_view&, const

        // for types that can construct string_view

Design B:

    We don't specialize any StaticEqualOp for const char*. Instead,
make_static_map({{"abc", 1}}) returns static_map<string_view, int>
instead of static_map<const char *, int>.

Which one is better? Or is there any more feasible design?


Vic Luo
Shanghai Jiaotong University
Key fingerprint 0x98809ca08bf5662a

Boost list run by bdawes at, gregod at, cpdaniel at, john at