Хотя файлы в Android Studio, казалось, были изменены и заполнены каким-то мусором, я смог открыть их в других редакторах, и данные все еще там.
Пользователи Windows, не делайте этого: "File > Invalidate Caches and Restart"
Я не нашел способа восстановить это в Android Studio. Но смог скопировать и вставить данные файла из другого редактора и заставить его работать.
Поскольку C++ обрабатывает по шаблону, у меня есть несколько шаблонов
Если существует только единственный шаблонный параметр, я называю его T (или U, V для вложенных шаблонов).
Когда существует несколько параметров, и использование не сразу очевидно затем, что я использую описательные имена, снабженные префиксом T. Например, TKey, TValue, TIdentifiier, и т.д... Это делает параметры довольно легкими определить в течение шаблонного использования.
Я избежал бы всей прописной версии все же. Большинство людей использует все прописные идентификаторы в C/C++ для представления макроопределения. Повторение, что шаблон для шаблонного параметра, вероятно, смутит людей в будущем.
Я использую конвенцию TName для шаблонного параметра и NameT для сохраненного шаблонного параметра.
template <typename TFirst, typename TSecond>
class Templated
{
typedef TFirst FirstT;
typedef TSecond SecondT;
}
typedef Templated<int, std::string> MyTemplated;
...
const MyTemplated::FirstT size;
Обычно традиционный путь состоит в том, чтобы использовать T, если существует только один параметрический усилитель типа. Если существует больше, используйте T в качестве префикса, например, TAtom. "T" префикс помогает немедленно видеть, что это - параметр типа. Используя TAtom для единственного типа параметр также допустим.
Вы не должны использовать специальное соглашение о присвоении имен для шаблонов, просто использовать ту же конвенцию что касается любого другого из того типа (что касается классов или переменных). Не должно иметь значения в коде, работаете ли Вы с шаблонными типами/значениями или нормальными.
Я пытаюсь следовать за понятием мое использование поставщика компилятора: это является не слишком коротким и не слишком подробным. И помогает мне прочитать сообщения об ошибках, которые я получаю со стандартными шаблонами. (Который является другой причиной, почему я переключился от const T&
кому: T const&
). Что-то как:
template <class Ty, class Container>
class my_algo { ...
где мой компилятор будет обычно использовать:
template <class _Ty, class _Container>
class std_algo { ...
В нашем магазине мы используем нотацию HungF##ngarian. Аргументы шаблона являются просто аргументами как все другие, кроме они не константа, ни переменная, а тип.
template< typename at_Container, typename at_Functor >
at_Functor& foreach( const at_Container& ac_Cont, at_Functor& av_Func ) {
return std::foreach( ac_Cont.begin(), ac_Cont.end(), av_Func );
}
Префикс описывает тип, в то время как имя предназначено для высказывания чего-то вроде роли игры аргумента в контексте определенной функции.
Если у меня есть класс с одним параметром типа, я использую имя T. Также это означает, что все operartion в этом классе работают с T.
Если у меня есть немногие параметр, я называю как в Вашем explamle AtomT, BIOT...
Если шаблонный параметр не является типом объекта, которому мы работающий в классе, например, стратегии, comaparator или функторе, я использую имя без T, например, ThreadStrategy, Соответствую.
Иногда для стараются не смешивать стили, я делаю определения типов в классе:
определение типа T value_type;
--
Повысьте соглашение о присвоении имен (http://www.boost.org/development/requirements.html#Naming_consistency), говорит о шаблонных параметрах затем:
Шаблонные названия параметра начинаются с прописной буквы.
Я следую за теми же общими шаблонными именами типов параметра именования конвенций, как я следую за классами идентификатора и структурами, который должен использовать для своей выгоды первую букву или каждое слово, как так:
class MyGizmo
{
};
struct Thingy
{
};
class TPSReport
{
};
template<class ValType> ...
template<typename Number> ...