константа неподписанный символ * к станд.:: строка

Вот CSS-версия анимации.

Я использую визуально скрытый флажок, кнопка - label, которая управляет флажком, и анимации CSS переключаются в состоянии проверки.

Единственное, что он выполняет начальную анимацию в обратном порядке при загрузке.

Редактировать: Я на самом деле исправил это с небольшим изменением CSS (:not(indeterminate)) и дополнительным фрагментом JS при загрузке, который устанавливает флажок indeterminate.

const checkbox = document.getElementById('sign-in-state');
checkbox.indeterminate = true;
@keyframes login {
	0% {
		left: 0;
		width: 40%;
	}
	50% {
		width: 60%;
	}
	100% {
		left: 60%;
		width: 40%;
	}
}
@keyframes logout {
	0% {
		left: 60%;
		width: 40%;
	}
	50% {
		width: 60%;
	}
	100% {
		left: 0%;
		width: 40%;
	}
}

.sign-in-checkbox:not(:indeterminate):not(:checked) + .box .square {
  --animation-name: login;
}

.sign-in-checkbox:not(:indeterminate):checked + .box .square {
	--animation-name: logout forwards;
}

.window {
  position: absolute;
  width: 100%;
  height: 100%;
  background: #c73030;
  z-index: 9999;
}
.box {
  position: absolute;
  top: 50%;
  left: 50%;
		overflow: hidden;
  transform: translate(-50%, -50%);
  width: 100vw;
  height: 100vh;
  background-color: #f7986c;
  z-index: -999;
}

.square {
		animation: var(--animation-name) 600ms reverse ease-in-out;
  position: absolute;
		right: auto;
  top: 0;
  width: 40%;
  height: 100%;
  background-color: cornflowerblue;
}


.btn {
	display: flex;
	align-items: center;
	justify-content: center;
	color: white;
	font-family: sans-serif;
  position: absolute;
  width: 200px;
  height: 70px;
  top: 80%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: #444;
}

.visually-hidden { /* https://snook.ca/archives/html_and_css/hiding-content-for-accessibility */
    position: absolute !important;
    height: 1px; width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px);
}
<input type="checkbox" id="sign-in-state" class="visually-hidden sign-in-checkbox">		
<div class="box">

			<div class="square">
				<label class="btn" for="sign-in-state">
					
					<div class="sI">Sign In</div>
				</label>
			</div>

		</div>

40
задан LM. 29 April 2009 в 20:28
поделиться

7 ответов

Вы можете попробовать:

temp_doc.uuid = std::string(reinterpret_cast<const char*>(
      sqlite3_column_text(this->stmts.read_documents, 0)
  ));

Хотя std :: string может иметь конструктор, который принимает const unsigned char * , по-видимому, это не так.

Почему бы и нет? Вы могли бы взглянуть на этот несколько связанный вопрос: Почему потоки C ++ используют char вместо unsigned char?

50
ответ дан 27 November 2019 в 01:19
поделиться

Причина, по которой люди обычно используют тип (unsigned char *), заключается в том, чтобы указать, что данные являются двоичными, а не простым текстом ASCII. Я знаю, что libxml делает это, и, судя по всему, sqlite делает то же самое.

Данные, которые вы получаете от вызова sqlite, вероятно, представляют собой кодированный в кодировке UTF-8 текст Unicode. Хотя может показаться, что reinterpret_cast работает, если кто-то когда-либо сохранит текст в поле, которое не является простым ASCII, ваша программа, вероятно, не будет вести себя хорошо.

Класс std :: string не разработан с учетом Unicode , поэтому, если вы спросите длину () строки, вы получите количество байтов, которое в UTF-8 не обязательно совпадает с количеством символов.

Краткий ответ: простой приведение может сработать, если вы уверены, что данные являются просто ASCII. Если это могут быть какие-либо данные UTF-8,

16
ответ дан 27 November 2019 в 01:19
поделиться

Я не знаком с sqlite3_column_text, но одну вещь, которую вы можете захотеть сделать, - это когда вы вызываете конструктор std: string, который вы хотите привести к (const char *). Я считаю, что он должен иметь конструктор для этого типа.

Однако, странно, что эта функция sqlite возвращает беззнаковый символ *, она возвращает строку Паскаля (первый символ - длина строки)? Если это так, то вам нужно будет создать std :: string с байтами и длиной.

4
ответ дан 27 November 2019 в 01:19
поделиться

try:

temp_doc.uuid = std::string(reinterpret_cast<const char*>(sqlite3_column_text(this->stmts.read_documents, 0)));
3
ответ дан 27 November 2019 в 01:19
поделиться

, если temp_doc.uuid является std :: string try:

temp_doc.uuid = static_cast<const char*>(sqlite3_column_text(this->stmts.read_documents, 0));
2
ответ дан 27 November 2019 в 01:19
поделиться

Невозможно создать std :: string из c первого неподписанного символа * - сначала нужно привести его к const char * :

temp_doc.uuid = std::string( reinterpret_cast< const char* >(
  sqlite3_column_text(this->stmts.read_documents, 0) ) );
2
ответ дан 27 November 2019 в 01:19
поделиться

On the off-chance you actually want a string of unsigned characters, you could create your own type:

typedef std::basic_string <unsigned char> ustring;

You should then be able to say things like:

ustring s = sqlite3_column_text(this->stmts.read_documents, 0);
20
ответ дан 27 November 2019 в 01:19
поделиться
Другие вопросы по тегам:

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