На основании этого комментария ...
@ RemyLebeau извините, чтобы уточнить: мне нужно, чтобы он возвращал другой тип в зависимости от параметров. это возвращает crc32 строки для параметра класса
. Как отмечалось в этой ветке комментариев, нет способа сделать это стандартным образом (через C ++ 17).
Если вы можете использовать либо clang, либо g cc, то вы можете использовать расширение g cc, поскольку оба поддерживают его. Я часто забываю о MSV C, если это явно не упомянуто - я на самом деле не использовал ОС на windows, поскольку они перешли с Windows 3 на Windows ME.
Однако, так как ваша функция cr c является constexpr, вы можете сопоставить значение cr c с уникальным типом.
constexpr std::uint32_t
operator""_crc(char const * str, std::size_t len)
{
// implementation to compute the value
}
template <auto Val>
struct CRC
: std::integral_constant<decltype(Val), Val>
{ };
// example...
constexpr auto zzz = CRC<"zzz"_crc>{};
Вы получите уникальный тип для каждого уникального значения, возвращаемого из "некоторой строки" _cr c.
Это не так приятно, но вы не можете приблизиться к тому, что вы хотите, с помощью строковых литералов с помощью вашего компилятора.
Прежде чем вы решите использовать 32-битный CR C, посмотрите здесь , чтобы увидеть вероятность получения столкновения (например, создание одного и того же га sh с разными строками) и убедитесь, что вы чувствуете себя комфортно с ним.