文字列リテラルからテンプレート クラスを作成したい: 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);
}
どうすればそれを行うことができますか?