Ternick
@Ternick

Можно ли конвертировать результат constexpr функции в строку?

Есть constexpr функция, которая получает одну строку, а отдают структуру в которой хранится другая строка. Вопрос в том, можно ли с помощью макроса на стадии компиляции, вместо структуры, получить строку из той же структуры.
Как пример:
ex

template <int sz>
struct dataString
{
	wchar_t data[sz];
	const int size = sz;
	constexpr dataString() : data{ L'\0' } { };
};

template <int size>
constexpr dataString<size> encoder(const wchar_t* str) {
	dataString<size> result;
	for (int i = 0; i != result.size; i++) {
		result.data[i] = str[i] ^ (wchar_t)key;
	}
	return result;
}

//Вот что получается:
constexpr dataString<4> test = encoder<4>(L"Test");
//А хочу получать, что-то такое:
wchar_t* test2 = TOTEXT(encoder<4>(L"Test");) \\ wchar_t* test2 = L"uxbF";


Можно ли такое сделать ?
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
@User700
А что делает макрос? Прибавляет ".data"? Тогда в коде лишняя точка с запятой внутри скобок. Но в этом случае должно работать. Почему не сделать оператор преобразование типа datastring к wchar_t*? Тогда и макрос не нужен.
Кстати, можно использовать пользовательские литералы чтобы каждый раз не считать символы... хотя нет, это подошло бы для другого.
Хм, а const int size = sz не отменит constexpr? При недостаточном уровне оптимизации
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы