2

文字列リテラルからテンプレート クラスを作成したい: create_eq("abcdefg") get IEqual<'a','b','c','d','e'> but ISO C++11's User-definedliters integer-literal と float-literal のみをサポート:

template<char... Chars>
  IEqual<Chars...>  operator "" _suffix()
  {

    return {};
  }
    auto a=3423134_suffix;//yes
    auto b="abcdef"_suffix;//error!

私は試します

using Char=int;
template<Char...ARGS>
class IEqual
{
public:

};

template<unsigned... I> struct Index{};
template<unsigned N, unsigned... I>
struct GenIndex : GenIndex<N-1, N-1, I...>{};
template<unsigned... I>
struct GenIndex<0, I...> : Index<I...>{};
template<unsigned I>
constexpr Char pos(const char*a)
{
    return a[I];
}
 template<unsigned...I>
   constexpr auto eq(Index<I...> ,const char*a)
       ->decltype(IEqual<(pos<I>(a))...>())// this error 
    {
        return {};
    }
    template<unsigned N>
   constexpr auto eq(const char(&a)[N])
   ->decltype(eq(GenIndex<N>{},a))
   {
       return eq(GenIndex<N>{},a);
   }

どうすればそれを行うことができますか?

4

0 に答える 0