Спасибо не надо как пишется

Всего найдено: 89004 благодарю за оперативные ответы! в предложении его характеристика в лучшем случае - пародия является ли в лучшем

Всего найдено: 89004

Благодарю за оперативные ответы! В предложении «Его характеристика в лучшем случае — пародия» является ли «в лучшем случае» вводным словом и как тогда обосабливать — с одной или с двух сторон?

Ответ справочной службы русского языка

Это не вводные слова, обособление не требуется.

Добрый день! Подскажите, пожалуйста, как пишется словосочетание — голубое топливо. В кавычках или нет?

Ответ справочной службы русского языка

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

Стоит ли обособлять деепричастный оборот в предложении «Это случай из ряда вон выходящий» ? Может быть, это устойчивое сочетание, тогда запятая не нужна?

Ответ справочной службы русского языка

Запятая не нужна именно по этой причине (определяемое слово само по себе не выражает нужного смысла).

Добрый день! Подскажите пожалуйста, как правильно: «Просим Вас разместить объявление по бегущей строке на канале….», или «Просим Вас поместить объявление по бегущей строке на канале….»

Ответ справочной службы русского языка

Можно выбрать любой глагол — поместить и разместить. Но следует использовать другой предлог: в бегущей строке.

В предложении «Все это, по меньшей мере, наивно» «по меньшей мере» является ли вводным словом и тебует ли обособления?

Ответ справочной службы русского языка

Эти слова не вводные, они не требуют обособления.

Добрый день. Как правильно сказать: с шестью детьми или с шестерыми детьми.
Спасибо.

Ответ справочной службы русского языка

Корректно: с шестью детьми. Но в им. п.: шестеро детей и шесть детей.

Как правильно пишется: небеспорочен или — не беспорочен?

Ответ справочной службы русского языка

Возможно и слитное, и раздельное написание.

Разъясните пожалуйста как будет выглядеть глагол «писать» отвечая на вопрос «что делая?»

Ответ справочной службы русского языка

Образование деепричастия в этом случае затруднительно.

Добрый день.Скажите, когда пишешь условие задания, надо ли в конце задания ставить точку или не надо
Образец:Задание 4. Прочитайте текст, составьте вопросы, подготовьте пересказ.

Ответ справочной службы русского языка

Точка ставится.

Уважаемая справка, скажите пожалуйста, является ли грамотным словосочетания _положить слова на музыку_ и _класть слова на музыку_ ? Если нет, то какое словосочетание нужно использовать? Заранее спасибо!
Denghu

Ответ справочной службы русского языка

Сочетание корректное.

Здравствуйте,скажите,пожалуйста,проверочное слова слов «праздник» и «здравствуйте»,если таковые есть.спасибо

Ответ справочной службы русского языка

Праздник — празден (краткая форма прилагательного праздный), здравствуйте — здравие. Но лучше эти слова проверять в словарном порядке.

Интересует вопрос правописания наречий с отглагольными прилагательными — слитно или раздельно? Примеры: гладко(?)выбритый, мелко(?)порезанный, остро(?)наточенный. Хочу знать именно правило, а не правописание конкретных примеров. Спасибо!

Ответ справочной службы русского языка

Словосочетания, состоящие из наречия и прилагательного, пишутся раздельно: гладко выбритый, мелко порезанный, остро наточенный. Исключение составляют слова-сращения, выступающие в качестве терминов (например, быстродействующий препарат – быстро действующий в экстремальных условиях человек). Отметим, что орфографический словарь допускает слитное написание гладковыбритый.

Добрый день!
В предложении «как педагог я считаю это большим достижением» нужно обособлять «как педагог»?

Ответ справочной службы русского языка

Если оборот содержит оттенок причинного значения (как педагог = потому что я педагог), то запятая ставится.

Подъем переворотом или подъем С переворотом. Спасибо.

Ответ справочной службы русского языка

К сожалению, нам не удалось выяснить, какое из этих сочетаний выступает в качестве терминологического в спортивной гимнастике.

Здравствуйте!

Очень интересует вопрос написания слово «запазуха» и почему оно отсутсвует в орфографическом словаре. Это слово присутствует в словаре Даля и, как мне помнится, в школе нам объясняли, что слово запазуха пишется именно вместе, а именно: «достать из запазухи», а не «достать из-за пазухи». Объяснялось слитное написание тем, что за время использования этого оборота оно превратилось в самостоятельное слово из-за редкого использования слова «пазуха» не в контексте оборота.

Надеюсь получить подробные пояснения.
Спасибо!

Ответ справочной службы русского языка

Орфографическая норма: за пазуху, за пазухой, из-за пазухи. Правописание следует проверять при помощи орфографических словарей. Словарь Даля  отражает орфографическую норму позапрошлого века.

Иногда в письменной речи встречаются досадные ошибки со словом «заранее». Люди искренне убеждены, что можно писать или только слитно или раздельно. Для них вопрос как писать: за ранее или заранее не стоит, всегда используется одна форма. Это ошибка.

В русском языке допустимы обе формы написания слова, все зависит от того контекста, в котором оно используется.

Наречие или прилагательное ?

Выявим часть речи, чтобы узнать правила написания. Предположим, перед глазами такое предложение:

«Миша сказал заранее спасибо Маше за помощь в приготовлении домашнего задания»

Узнаем слово «заранее» как пишется в предложении, для этого ответим на вопросы:

  1. На какой вопрос отвечает слово? Вопрос «когда?». Когда Миша сказал Маше спасибо? На вопрос «когда?» отвечает наречие.
  2. Изменяемая или неизменяемая часть речи? Неизменяемая, нельзя поменять форму слова «заранее» в предложении. Это признак наречия.

Получается, в данном случае речь идет о наречии. Но этого пока мало, чтобы ответить на вопрос: заранее спасибо как пишется. Определим слово, от которого возникло «заранее».

Смысл у лексемы простой.

Заранее — ранее, то, что было до какого-то события.

Например, Миша поблагодарил Машу за помощь в подготовке домашнего задания, хотя она еще и не начиналась.

Значение слова заранее

Чтобы узнать как пишется заранее, вспомним, что оно возникло от прилагательного «ранний», к которому добавилась приставка «за». Получилось красивое, уже знакомое слово. Этого достаточно, чтобы узнать за ранее благодарю слитно или раздельно. Такие слова всегда пишутся слитно.

Предлог или приставка?

Теперь вы знаете как правильно написать «заранее благодарю». Но всегда ли тот, кто заранее благодарен пишет об слитно? Не всегда. Иногда вместо приставки можно встретить предлог. Тогда получится наречие «ранее» и предлог «за». В предложенном варианте надо писать раздельно.

Ответ на вопрос о том, слово заранее как пишется правильно зависит от того, приставка перед нами или глагол. Попробуем ответить на вопрос, представим такое предложение:

«Оля сказала спасибо Маше за ранее приготовленное домашнее задание»

Вроде бы почти ничего не поменялось. Почему на вопрос о том, как пишется слово заранее теперь отвечено иначе? Приглядимся к предложению внимательнее. Оля говорит спасибо Маше за ранее оказанную помощь в приготовлении домашнего задания. Событие уже произошло, а благодарность выражается только сейчас. Это разительно отличается от уже известной нам ситуации.

Если читателю трудно запомнить как правильно за ранее спасибо или заранее спасибо выражать, запомните несколько хитрых способов:

  1. Замените подозрительное слово на «раньше». В предложенном выше предложении можно сказать «Оля сказала спасибо Маше раньше приготовленного домашнего задания». Подходит по смыслу, значит пишем раздельно!
  2. Попробуйте поменять местами предлог и наречие. В предложении «Олег попросил отгул за ранее отработанное время» смысл тот же, что в предложении «Олег попросил отгул ранее за отработанное время».

Самопроверка

Попытайтесь решить как поступить в этих случаях:

«Учитель сказал Гоше заранее спасибо за ответ»

Попробуем поменять местами предлог и наречие. Получим «Учитель сказал ранее за Гоше спасибо за ответ». Форменная абракадабра, пишем спасибо заранее слитно.

Другой вопрос для самопроверки, чтобы узнать заранее как пишется раздельно или слитно:

«Наташа попросила Вику выйти заранее, чтобы точно успеть погулять»

Когда Наташа попросила Вику выйти? До прогулки, чтобы точно успеть. Перед нами наречие с приставкой, пишем слитно!

Пример употребления слова заранее

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

Распространенные ошибки

На письме встречаются забавные и не очень ошибки. Например, можно написать «в заранее». Это ошибочное написание слова. Предлог «в» здесь неуместен, слово уже конкретно отвечает на вопрос «когда?». На вопрос «где?» ответ может быть получен исходя из контекста предложения.

Другой спорный случай — двойное «нн» — зараннее или заранее. В слове «заранее» удвоенная «н» не встречается, если слово пишется слитно. Зато написание «за ранние» вполне допустимо. Но перед нами уже не наречие, а одна из форм прилагательного «ранний».

Представим предложение

«Спортсмены наказаны за ранние попытки стартовать»

В данном случае слово «ранние» отвечает на вопрос «какие?» и связано со словом «попытки». Пишется оно раздельно и удвоенная «н» имеет полное право на существование.

Заключение

Читатель узнал как пишется заранее спасибо, познакомился с тем, что очень важную роль приобретает контекст разговора. Не ошибитесь в написании спорного слова. В лучшем случае вы просто ошибетесь, а в худшем сделаете так, что вас не поймут или поймут неправильно.

Надо знать как пишется слово заранее слитно или раздельно. Для закрепления знаний темы о том, за ранее или заранее спасибо как пишется решите несколько словесных задач самостоятельно.

kak pisat teksty dlya socsetej astrologu

Тема продвижения астролога очень обширна и в одной статье рассказать сразу обо всём невозможно. Материал объемный.

При продвижении астрологического блога важным элементом является текст. Да, есть еще визуальная составляющая — картинки и видео. Но стоит заметить, что в астрологический блог люди заходят для того, чтобы получить полезную информацию, то есть не просто убить время, пролистывая пальцами дисплей смартфона.

Пролистывают пальцами смартфон обычно в блогах развлекательного характера — в такого рода блогах текст не должен нести интеллектуальной нагрузки.

Для человека, который интересуется астрологией, важен текст. И не просто астрологический текст, а текст, содержащий подлинную информацию об астрологии. Прекрасно, если это выжимка из собственных наблюдений. Ведь астрология основана на опыте, который приобретается в результате изучения карт разных людей.


Приглашаю вас на сайт проекта «ASTRO PR» + вы можете получить БЕСПЛАТНО контент-план на 1616 тем по натальной астрологии.

Телеграм-канал «ASTRO PR» | Instagram «ASTRO PR»  | Сайт «ASTRO PR»


Общие астрологические прогнозы по знакам зодиака постепенно уходят в прошлое. Люди образовываются и уже знают, что общий прогноз по знакам — это не корректная и обманчивая информация.

Это происходит потому что астрология день ото дня становится всё более популярной дисциплиной. Много консультирующих астрологов проводят обучение. На рынке существуют серьёзные астрологические институты, школы и центры, где проводят обучение астрологии преподаватели с большим опытом консультирования и преподавания.

Очень много людей учится самостоятельно осваивая дисциплину «астрология». Поэтому зачастую, люди, заходящие в блог астролога, уже знают основы астрологии. Это образованная публика.

Так почему же люди заходят в астрологический блог астролога?

Если посмотреть и почитать статьи на астрологическую тематику в интернете, то можно увидеть много перепечатанных текстов из книг известных астрологов. Я сама лично в этом убедилась — мне удалось провести двухлетний мониторинг астрологии. Так как я маркетолог-исследователь, то изучая астрологию, я смотрела на всё с позиции продвижения и маркетинга.

Астрологические тексты читают те, кто:

  • Обучается астрологии для того, чтобы самостоятельно консультировать самого себя.

  • Обучается астрологии для того, чтобы отыскать профессионального астролога для того, чтобы консультироваться у него в дальнейшем.

  • Обучается астрологии для того, чтобы стать профессиональным астрологом с помощью самообучения.

Астрология — это наука, сочетающая в себе математический расчёт, логику и философию.

Это сильно отражается на специфике текстов по астрологии.

По своему опыту написания текстов по астрологии для социальных сетей, я сделала следующий вывод: надо писать максимально просто даже о самом сложном. При этом, не копируя тексты из книг или тексты из других источников, а писать с нуля своим авторским слогом.

Я думаю, что именно свой авторский стиль является залогом успеха при продвижении астрологического блога.

СТАТЬИ ПО ПРОДВИЖЕНИЮ АСТРОЛОГИЧЕСКИХ ПРОЕКТОВ

Какую специлизацию выбрать астрологу?

Упаковка личного бренда астролога

Позиционирование: астролог или астропсихолог?

Разделять астрологию и Таро?

Астрологический блог астролога

Астрология может стать вашим бизнесом

Астрологический текст должен содержать информацию:

  • о математическом расчёте;

  • логические выводы;

  • философские рассуждения;

  • рекомендации.

Я знаю, что астрологи редко когда любят друг друга. Вроде бы сообщество единомышленников, но вот дружбы между ними часто не существует. Это связано с тем, что много школ, проповедующих свои истины. Можно сравнить с религиями — их много, но мы с вами знаем, что бог един для всех.

Так как я человек, обладающий хорошей логикой и холодным рассудком, понимаю, что в астрологии есть понятная и четкая логика. Она основывается на знаках зодиака, планетах и домах. Зная суть и понятийную составляющую знака зодиака, планеты и дома — можно разложить гороскоп человека.

Аспекты между планетами являются связующими ниточками между знаком, другими планетами и домом.

Конечно, надо хорошо понимать и знать понятия каждого элемента гороскопа.


МАСТЕР-КЛАСС «ПРОДАЮЩИЕ АСТРОЛОГИЧЕСКИЕ ТЕКСТЫ»


Когда вы, как астролог, пишете текст для социальных сетей, не бойтесь добавлять что-то от себя — выражайте своё собственное мнение, полагаясь на логику и понятийный аппарат астрологии.

Исключите сложные интерпретации — переводите язык звёзд на человеческий язык, понятный каждому человеку!

И ещё, так как астрология сложна для понимания, поэтому дробите темы. Этим вы сможете намного лучше донести свою мысль до читателя.

При публикации текста в социальные сети добавляйте свою подпись — этим вы сможете запомниться своим читателям. 

Да, ещё по поводу продающих текстов астролога. По мне, так каждый ваш текст должен быть продающим. Но… Тонко и изящно.

Астрология не терпит грубости и хамства. Она нежна, как майская роза. Продавать себя нужно с помощью полезной информации, которая нужна человеку, зашедшего в ваш астрологический блог.


Автор текста: Екатерина Вайс — эксперт по продвижению астрологических проектов. Подпишись на телеграм-канал «ASTRO PR»

Заказать продвижение астролога: kv@astro-pr.ru | личный telegram @ketavas

Личный тренинг «Продвижение астролога»

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

common_type_ru/image1.png

В начале я хотел бы сказать спасибо своему коллеге khandeliants, который помог прояснить некоторые неочевидные для меня моменты относительно трактовки стандарта С++, а также доработать примеры кода.

Зачем это пригодилось нам

Всё началось с того, что команда PVS-Studio начала активно дорабатывать ядро С++ анализатора. Одна из больших задач – внедрение новой системы типов. Сейчас она состоит из специально закодированных строчек, мы же хотим заменить её на иерархическую систему. Подробно на новой системе типов я останавливаться не буду. В общих чертах мы пытаемся сделать из этого:

common_type_ru/image2.png

это:

common_type_ru/image3.png

Подробно и со смешными картинками о нашей новой и старой системе типов не так давно рассказывал мой коллега Юрий на конференции itCppCon21. Сейчас, как мне кажется, у него набралось материала на два или три новых доклада. Будем с нетерпением их ждать :)

У новой системы типов есть аналоги type_traits, они так же, как и их прародители, помогают модифицировать тип или получить о нём нужную информацию.

Недавно я писал реализацию std::common_type для нашей системы типов. Этот трейт часто применяется в метапрограммировании, когда требуется вывести общий тип для произвольного числа переданных типов. Нам же подобный трейт оказался удобен для вывода результирующего типа, например, когда мы обходим бинарное выражение и встречаем арифметическую операцию:

if (operationInfo->m_type == OperatorType::Arithmetic)
{
  auto leftType  = TypeTraits::ExtractMemberType
                   (result->GetLeftOperand().GetType());
  auto rightType = TypeTraits::ExtractMemberType
                   (result->GetRightOperand().GetType());
  auto resType = Types::Traits::CommonType(leftType, rightType);
  ....
}

Код, который нужно было задействовать для такой операции, раньше был более громоздким и сложным, теперь же он выглядит довольно изящно.

Зачем он вообще нужен C++ разработчикам

Допустим, что мы хотим написать наивную реализацию шаблона функции для скалярного произведения двух векторов, причем векторы могут быть инстанцированы различными типами. Требуется, чтобы тип скалярного произведения выводился автоматически. Такой шаблон функции начиная с C++14 можно реализовать как-то так:

#include <vector>

template <typename T, typename U>
auto dot_product(const std::vector<T> &a, const std::vector<U> &b)
{
  // some bounds checks

  ??? result {};

  auto a_it = a.begin();
  auto b_it = b.begin();

  while (a_it != a.end())
  {
    result += static_cast<???>(*a_it++) * static_cast<???>(*b_it++);
  }

  return result;
}

Подразумевается, что в функцию приходят векторы одинакового размера. В противном случае мы не сможем посчитать скалярное произведение и получим выход за границу массива.

Итак, функция делает именно то, что мы и хотели. Компилятор сам выводит результирующий тип из return statement за нас. Осталась одна проблема – для переменной result нужно как-то вывести общий тип.

Но перед тем, как писать код, давайте рассмотрим такую интересную языковую конструкцию, как тернарный оператор. Возможно, он сможет помочь нам в этом непростом деле.

Conditional operator

Как мне кажется, приводить описание работы тернарного оператора из стандарта будет лишним, так как оно довольно большое. Поэтому вкратце рассмотрим, как происходит вывод типа в основных случаях.

Для наглядности будем визуализировать результаты с помощью двух вещей:

  • вариативный шаблон класса tp без определения, который позволит узнать имя результирующего типа при помощи ошибки компиляции;
  • Clang AST: покажет абстрактное синтаксическое дерево программы.

Перейдём к случаям:

Случай 1

Если и второй, и третий операнд имеют тип void, то результат также имеет тип void. Такое возможно, например, если оба выражения содержат throw, либо вызовы функций, возвращающих void, либо явное преобразование к типу void. Пример кода с выводами сообщений компиляторов:

void foo();
void bar();

int foobar();
float barfoo();

template <typename ...>
struct tp;              // type printer

void examples(bool flag)
{
  tp<decltype(flag ? foo() : bar()),                     // void
     decltype(flag ? (void) foobar() : (void) barfoo()), // void
     decltype(flag ? throw 0 : throw 3.14)> _;           // void
}

Если второй или третий операнд – выражение throw, то результирующий тип выводится из другого. Другой операнд при этом не должен быть типа void. Пример кода с выводами сообщений компиляторов:

char arr[16];

template <typename ...>
struct tp;              // type printer

void examples(bool flag)
{
  tp<decltype(flag ? nullptr : throw "abs"), // nullptr_t
     decltype(flag ? 3.14 : throw 3.14),     // double
     decltype(flag ? arr : throw 3.14)> _;   // char (&)[16]
}

Случай 2

Если второй и третий операнд имеют разные типы, и при этом один из них классового типа, то выбирается такая перегрузка, которая сформирует операнды одинаковых типов. Например, может быть выбран конвертирующий конструктор или оператор неявного преобразования. Пример кода c выводами сообщений компиляторов:

template <typename ...>
struct tp;              // type printer

struct IntWrapper
{
  IntWrapper(int) 
  {
    // ....
  }
};

void examples(bool flag)
{
  tp<decltype(flag ? IntWrapper {42} : 42)> _;
}

Если посмотреть Clang AST этого кода, то можно заметить:

....

-FunctionDecl <line:9:1, line:12:1> line:9:6 foo 'IntWrapper (bool)'
 |-ParmVarDecl <col:10, col:15> col:15 used b 'bool'
 `-CompoundStmt <line:10:1, line:12:1>
   `-ReturnStmt <line:11:3, col:34>
     `-ConditionalOperator <col:10, col:34> 'IntWrapper'
       |-ImplicitCastExpr <col:10> 'bool' <LValueToRValue>
       | `-DeclRefExpr <col:10> 'bool' lvalue ParmVar 0x558edcfc99d8 'b' 'bool'
       |-CXXTemporaryObjectExpr <col:14, col:30> 'IntWrapper' 'void (int)' list
       | `-IntegerLiteral <col:27> 'int' 42
       `-ImplicitCastExpr <col:34> 'IntWrapper' <ConstructorConversion>   // <=
         `-CXXConstructExpr <col:34> 'IntWrapper' 'void (int)'
          `-IntegerLiteral <col:34> 'int' 42                              // <=

Здесь Clang неявно вызвал конвертирующий конструктор для третьего операнда, отчего оба операнда стали типа IntWrapper.

Случай 3

Над вторым и третьим операндом применяются standard conversions: lvalue-to-rvalue, array-to-pointer и function-to-pointer. После этих конверсий возможны несколько ситуаций:

Второй и третий операнды имеют одинаковый тип, тогда таким же будет и результирующий. Пример кода c выводами сообщений компиляторов:

template <typename ...>
struct tp;              // type printer

struct MyClass
{
  // ....
};

void examples(bool flag)
{
  tp<decltype(flag ? MyClass {} : MyClass {})> _;
}

Также второй и третий операнды могут иметь арифметический тип или тип перечисления. Для арифметических типов и перечислений будут применяться usual arithmetic conversions для формирования общего типа, который и будет результирующим. Пример кода c выводами сообщений компиляторов:

template <typename ...>
struct tp;              // type printer

void examples(bool flag)
{
  char ch                = 1;
  short sh               = 2;
  double d               = 3;
  float f                = 4;
  unsigned long long ull = 5;
  long double ld         = 6;

  tp<decltype(flag ? ch :  sh),
     decltype(flag ? f :  d),
     decltype(flag ? ull : ld) > _;
}

Также один или оба операнда могут иметь тип указателя или указателя на член класса. Тогда применяются правила pointer conversions/pointer-to-member conversions, function pointer conversions и qualification conversions для формирования композитного типа указателя, который и будет результирующим. Пример кода c выводами сообщений компиляторов:

template <typename ...>
struct tp;              // type printer

struct MyBaseClass
{
  // ....
};

struct MyClass : MyBaseClass
{
  // ....
};

void examples(bool flag)
{
  auto a = new MyClass();
  auto b = new MyBaseClass();
  tp<decltype(flag ? a : b)> _;
}

Также оба операнда могут иметь тип std::nullptr_t, либо один из них std::nullptr_t, а другой – константа нулевого указателя. Тогда результирующий тип – std::nullptr_t. Пример кода c выводами сообщений компиляторов:

#include <cstddef>

template <typename ...>
struct tp;              // type printer

void examples(bool flag)
{ 
  tp<decltype(flag ? std::nullptr_t {} : nullptr )> _;
}

Теперь мы видим, что вывести общий тип очень просто: в большинстве случаев достаточно воспользоваться тернарным оператором. Давайте отвлечемся от теории и попробуем применить только что приобретённые знания и написать обобщённый код, который будет это делать.

P.S.: Для того, чтобы написать нужный нам аналог std::common_type для новой системы типов (TypeTraits::CommonType), нам пришлось реализовать все вышеописанные и некоторые нерассмотренные правила вывода общего типа.

Пишем свой common_type

Вернёмся к нашей функции скалярного произведения векторов. Начиная с C++11 в нашем распоряжении есть спецификатор decltype, который возвращает тип переданного в него выражения. Мы уже использовали его выше для работы с type_printer. Из прошлого абзаца мы знаем, что если протолкнуть в него вызов тернарного оператора с объектами двух наших типов, то компилятор сделает за нас вывод общего типа.

Попробуем применить сказанное в действии:

#include <vector>

template <typename T, typename U>
auto dot_product(const std::vector<T> &a, const std::vector<U> &b)
{
  // ....
  decltype(true ? std::declval<T>() : std::declval<U>()) result {};
  // ....
}

Давайте подробно разберем, что делает этот код:

  1. При помощи спецификатора decltype мы возвращаем тип выражения в скобках.
  2. Внутри decltype применяем тернарный оператор. Первым операндом можно сделать любое выражение, например true.
  3. Во второй и третий операнды располагаем переданные шаблонные типы. Только есть одна проблема – тернарный оператор оперирует выражениями. Поэтому «создадим» объекты через std::declval.

std::declval<T> – это шаблон функции без реализации, который возвращает rvalue-ссылку на тип T. При типе T = void возвращает тип void. Этот шаблон чаще всего применяется внутри невычисляемого контекста (decltype, sizeof, requires,….) и позволяет как бы работать с объектом переданного типа, обходя вызов конструктора. Это особенно полезно, если тип T не имеет публичного конструктора по умолчанию либо он удален.

Не забываем, что нам также могут передать ссылки в качестве типа, поэтому стоит применить std::decay. Он уберет CV-квалификаторы, ссылки, добавит указатели функциям (function-to-pointer conversion) и преобразует массивы в указатели (array-to-pointer conversion):

#include <vector>

template <typename T, typename U>
auto dot_product(const std::vector<T> &a, const std::vector<U> &b)
{
  // ....
  std::decay_t<
        decltype( true ? std::declval<typename std::decay<T>::type>()
                       : std::declval<typename std::decay<U>::type>()
        )
  > result {};
  // ....
}

Согласитесь – писать такое в коде совсем не хочется. Попробуем немного причесать код, для этого нам надо написать пару вспомогательных шаблонов классов для удобства. Во-первых, попробуем написать класс для вывода общего типа из двух переданных:

template <class T, class U>
struct common_type
{
  using type = std::decay_t<
      decltype( true ? std::declval< std::decay_t<T> >()
                     : std::declval< std::decay_t<U> >() ) >;
};

Теперь можем применить этот common_type в нашем коде:

#include <vector>

template <typename T, typename U>
auto dot_product(const std::vector<T> &a, const std::vector<U> &b)
{
  // ....
  common_type<T, U>::type result {};
  // ....
}

Отлично, мы избавились от всей этой страшной портянки, код стал лаконичным. Но хочется теперь сделать common_type таким, чтобы он умел работать с любым числом переданных типов – от нуля до произвольного. Тогда немного поменяем наш основной шаблон класса и его специализации:

#include <type_traits>

template <typename ...>
struct common_type; // (1)

template <typename ...Ts>
using common_type_t = typename common_type<Ts...>::type;

template <>
struct common_type<> // (2)
{
};

template <class T>
struct common_type<T> // (3)
{
  using type = std::decay_t<T>;
};

template <class T, class U>
struct common_type<T, U>         // (4)
{
  using type = std::decay_t<
      decltype( true ? std::declval< std::decay_t<T> >()
                     : std::declval< std::decay_t<U> >() ) >;
};

template <class T, class U, class... V>
struct common_type<T, U, V...>         // (5)
{
  using type =  typename common_type
               <typename common_type<T,U>::type, V...>::type;
};

Стоит отметить, что примерно так common_type и реализован в стандартной библиотеке. Теперь, давайте подробно разберём, что тут происходит:

  1. Объявляется основной вариативный шаблон класса.
  2. Для пустого списка шаблонных аргументов сделаем явную специализацию шаблона, которая ничего не содержит.
  3. Для одного шаблонного аргумента сделаем частичную специализацию, внутри которой будет лежать этот же тип после std::decay, который уберёт CV-квалификаторы, ссылки, добавит указатели функциям (function-to-pointer conversion) и преобразует массивы в указатели (array-to-pointer conversion).
  4. Для двух шаблонных аргументов сделаем частичную специализацию, которая выведет результирующий тип на основе правила вывода общего типа тернарного оператора, применив перед этим std::decay на переданные аргументы.
  5. Для трех и более шаблонных аргументов сделаем частичную специализацию, которая сначала посчитает общий тип для первых двух аргументов при помощи специализации для 2 аргументов. Затем она рекурсивно инстанцирует себя, передав в качестве шаблонных аргументов общий тип для первой пары типов и оставшийся пакет шаблонных параметров. По сути, common_type<a, b, c, d> эквивалентно common_type<common_type<common_type<a, b>, c>, d>. Пример на C++ Insights.

Как я уже говорил выше, более подробно, с правилами вывода типа для самого тернарного оператора можно ознакомиться в стандарте. Я использовал последний актуальный рабочий черновик, там их можно найти в главе 7.6.16. Сами черновики можно посмотреть, например, здесь. Также можно воспользоваться документацией на cppreference.

Заключение

Мы посмотрели, как работает std::common_type и, чтоб более подробно в нём разобраться, написали его реализацию, почитав стандарт, и даже немного затронули логику работы тернарного оператора. Надеюсь, эта статья оказалась полезна. Всем спасибо за внимание!

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Vladislav Stolyarov, Phillip Khandeliants. An article for those who, like me, do not understand the purpose of std::common_type.

Вы дисциплинированно выкладываете посты. Подбираете удачную фотографию, возитесь с фильтрами, выставляете хэштеги и геолокацию. По науке чередуете информационный, развлекательный и продающий контент. Но продажи не растут или растут очень медленно. В чем тут может быть дело?

Чтобы эффективно использовать ресурс соцсетей, надо понимать: все ваши подписчики делятся на три категории.

Первая категория — холодные подписчики

Их отдаленно интересует ваша тема — поэтому они и подписались. Но пока эти люди не уверены, нужен ли им ваш продукт как класс.

Например, вы оформляете праздники воздушными шарами, а у подписчика (скорее, подписчицы) впереди праздник — свадьба, день рождения ребенка или корпоративное торжество. Ей в принципе нравится мысль тематически украсить все это дело блестящими гелиевыми звездами и цветными арками, но все же она размышляет трезво, головы не теряет.

  • «Выглядит любопытно, но я не уверена, что воздушные шары — это подходящий тип декора для свадьбы. Живые цветы — более выигрышный вариант».
  • «Очень нарядно, было бы здорово заказать композицию из шаров с блестками на день рождения малышки… Но все же стоит это не копейки. Может, на эти деньги заказать еду в ресторане, и не придется готовить? Ребенку вообще-то еще все равно, будут ли на ДР воздушные композиции или нет».
  • «Шары с нашим логотипом для участников серьезной конференции? С одной стороны, может привлечь внимание. С другой — может, не рисковать и, как всегда, заказать блокноты и шариковые ручки?»

Таких людей пока не очень волнует, чем именно вы лучше или хуже конкурентов в этой нише. И им пока рано делать спецпредложения, предлагать скидки. То, что им нужно — это публикации, которые раскрывают преимущество вашего типа продукта.

Например, можно рассказать о том, что:

  • Украшение свадьбы шарами обойдется как минимум в три раза дешевле, чем живыми цветами. Выглядеть это будет не менее изысканно. Простора для фантазии больше.
  • Дети дошкольного возраста, как правило, вообще ничего не едят на днях рождения. Для них главное — веселые игры. Две пиццы — и все будут счастливы. А день рождения малыша — это еще и праздник для мамы. Как ей (вам) будет приятно выложить в соцсети яркие фотографии вашей красивой семьи в облаке перламутровых шариков, как это обычно делают звезды инстаграма.
  • Думаете, оформление шарами не подходит для серьезного мероприятия? А вот мы недавно сделали огромный логотип из шаров для бизнес-конференции, многие участники фотографировались около этой композиции и выкладывали в соцсети. Заказчик был очень доволен — получился неплохой вирусный эффект.

Если таких публикаций у вас не будет — возрастает вероятность, что подписчик от вас отпишется, не найдя ответов на свои внутренние вопросы.

Например, девушка, решившая худеть к лету, размышляет, куда ей направить свой бюджет — на покупку онлайн-тренировок или заказ программы диетического питания. А вы рассказываете, что ваша программа питания лучше других программ, и вообще у вас сейчас скидки.

Девушке пока рано об этом. Возможно, она обнаружила ответ в другом аккаунте и «прикипела» к нему, а впоследствии и стала там клиентом. Люди склонны отдавать деньги туда, где, по их ощущениям, их понимают.

Поэтому не стоит забывать про прохладных читателей. Необязательно писать для них каждый день — можно посвящать им около 20% своего творчества.

Три примера тем, которые подходят подписчикам, чья температура еще довольно низкая

Тема 1. Развенчание мифов о вашем типе продукта

Например: «Три мифа о частном детском садике. Миф первый — в муниципальных садах безопаснее. А вы где-то видели видеонаблюдение в госсадах? Миф второй — это дорого. Ну это смотря с чем сравнивать. Няня обойдется дороже, и это точно более опасно, чем сад. И т.п…»

Тема 2. Плюсы и минусы. Сравнение вашего типа продукта с другими продуктами, решающими ту же задачу

«У вас есть выбор: заказать корпусную мебель на заказ по вашим меркам или купить стандартную комплектацию в Икеа. Давайте сравним плюсы и минусы…»

Или: «Вы выбираете между абонементом в фитнес-клуб и онлайн-тренировками в домашних условиях. Перечислим достоинства и недостатки каждого варианта».

Нужно стремиться сделать такую публикацию более или менее объективной. Но, наверное, плюсов у вашего типа продукта найдется больше ?

Тема 3. Присоединение к знаменитостям

«Никак не можете решиться на крупную бижутерию? Вам кажется, что это выглядит слишком молодежно? Но посмотрите, как эти объемные серьги выглядят на Джулии Робертс».

«Монтессори детский сад… Правильный ли это выбор для вашего ребенка? Кстати, многие выдающиеся люди посещали именно сады, работающие по этой методике. Вот и принца Джорджа, наследника британского престола, отдали в Монтессори садик».

Вторая категория — теплые подписчики

У них уже есть вполне определенная проблема или потребность. Они поняли, что ваш тип продукта им нужен. Теперь они ищут разные варианты, выбирают, прицениваются.

  • Будущая невеста точно поняла, что хочет свадьбу в парижском стиле, украшенную воздушными шарами оттенков пудры и пыльной розы. Теперь ей надо остановиться на конкретной компании, которая это сделает.
  • Или родители трехлетнего ребенка, повыбирав между государственным садом, частным садом, няней, бабушкой и затянувшимся декретом мамы, решили в пользу частного садика. Осталось понять, в какой именно сад пойдет малыш.
  • Или семья уже определилась, что ей нужна корпусная мебель по индивидуальным размерам. И выбирает, кому отдать свои деньги.

Этой аудитории важно объяснить, почему нужно выбрать вас, а не конкурентов. Чем вы лучше другой компании с шариками, или другого детсада, или другого поставщика мебели.

Вот темы, которые подходят теплой аудитории:

Тема 1. Как выбрать… Или ошибки при выборе

Мини-статьи типа «На что обращать внимание при выборе кондитерской, в которой вы собираетесь заказать торт». Или «Пять ошибок при заказе воздушных шариков».

Конечно, в таких постах надо «подсветить» те факторы, которые являются вашей сильной стороной. Например: «Обязательно спросите, есть ли автомобиль со специальной холодильной камерой, в которой ваш торт не подтает». Если конечно, у вас есть такой автомобиль:) Если нет — этот фактор упоминать не надо.

Тема 2. Истории, которые показывают ваш профессионализм

Истории ваших клиентов (позитивные, конечно) хороши для любой аудитории и вообще в любом месте любого продающего текста:) Но здесь они особенно уместны. Например, «Как мы поставили звук Р ребенку, от которого отказались все логопеды». Или «Посмотрите — какой удачный дизайн шкафа. Мы поставили большой шкаф в маленькой комнате, и она при этом стала выглядеть даже просторнее».

Тема 3. Обработка возражений

Вы, конечно, лучше меня знаете, какие сомнения бывают у ваших клиентов. Дорого, долго, не поможет и так далее.

Озвучиваем сомнение, а потом приводим свои аргументы, почему не стоит этого опасаться. Одно возражение — один пост.

Подписчикам, чья температура постепенно ползет вверх, мы посвящаем в среднем 60-70% публикаций.

И третья категория — горячие подписчики

Они уже почти приняли решение заплатить именно вам. И им нужен только небольшой импульс, чтобы стать вашим клиентом. Здесь важно дать привлекательное (спец)предложение, развеять последние сомнения.

  • Сделать специальное предложение — предложить скидку, подарок. Обязательно ограничить по времени
  • Развеять последние сомнения — например, написать о гарантии.

Таких постов — 10-20%.

Я часто вижу такую ошибку:

В аккаунте посты ТОЛЬКО ОДНОГО ТИПА. Например, бесконечная демонстрация продукта (то есть посты для теплых) и ни одного предложения купить, скидочки, акции ?‍♀️

Или наоборот: то одно рекламное предложение, то другое, как будто все подписчики уже разогреты до температуры кипения.

А для холодных вообще редко встречаются.

Еще раз повторю: чтобы по максимуму использовать потенциал соцсетей, надо чередовать посты для этих трёх групп. Пропорции могут быть разными — не обязательно именно такими, как я написала.

Если у вас новый, непривычный тип продукта — имеет смысл делать больше публикаций для холодной аудитории. Так же стоит поступать, когда у вас продукт, который у большой части населения вызывает недоверие, — например, связанный с МЛМ.

Публикации для холодной аудитории — это еще и способ привлечь новых людей в аккаунт

До этого я говорила о людях, которые уже подписались на вас. А ведь есть те, кто «проходили мимо» и случайно увидели ваш инстаграм, или встретили вас в другой соцсети. И их тоже можно считать вашими холодными потенциальными клиентами.

В каком случае они на вас подпишутся? Чем их можно заинтересовать? Не вашими скидками пока и не сравнением с конкурентами — у них еще не та степень заинтересованности в вашем продукте.

А вот общая, «образовательная» информация о том, как предлагаемое вами решение может улучшить их жизнь, решить их проблемы, избавить их от «боли» (то есть, как раз то, что вы и пишете для холодных) может заставить их нажать кнопку «подписаться».

По сути — это та же воронка продаж

Помните статью про подушки и воронку продаж? Здесь тот же самый принцип. Мы осознаем, что холодному потенциальному клиенту «в лоб» продать что-либо сложно. И поэтому доводим его до нужной температуры постепенно.

Через email-рассылку вы можете подогревать клиента персонифицировано. Вы знаете, когда он на вас подписался и можете отправить ему сначала 3 «холодных» сообщения, потом 5 «теплых», а затем — спецпредложение.

К сожалению, в соцсетях такое невозможно (если оставить за скобками рассылку личных сообщений, а говорить именно о постах в аккаунте). Подписчики присоединяются хаотично, все публикации находятся в открытом доступе и видны всем желающим. Вы не можете сделать так, чтобы новый подписчик сначала прочел 3 ваших поста для холодной аудитории, потом 10 мини-статей для теплой, а потом увидел ваши спецпредложения.

Но тем не менее, включая публикации для разных категорий читателей, мы увеличиваем шансы на продажу.


Хотите конкретный план постов в Инстаграм на 12 месяцев? Со множеством идей, примеров и рекомендаций.

Перейти к описанию курса «Контент-план для Инстаграм на 12 месяцев»

  • Спасибо как пишется на татарском языке
  • Спасибо и вас с праздником как пишется правильно
  • Спасибо конечно как пишется
  • Спасибо за такую красоту как пишется правильно
  • Спанч боб квадратные штаны на английском как пишется