* Переменные-члены с префиксом 'm' или 'm _'
Сомнительный.
* Префикс класса (обычно специфичный для проекта, т. Е. В Qt все имена классов имеют префикс «Q»)
Грозный. Была ли необходимая практика в тот день.
Большая тройка на самом деле не является стандартом и в значительной степени была заменена Большой Двойкой как хорошая практика (потому что использование RAII для указателей устраняет необходимость в деструкторе, даже когда вам нужны Копировать ctr и присваивание).
Во всяком случае ....
Вам необходимо отличать параметры вашего шаблона от обычного кода. Таким образом, вы должны использовать соглашение об именах, которое вы не используете в стандартном коде для параметров шаблона. Один хороший метод, используемый многими, - это использовать CamelCase для параметров шаблона. Другим важным аспектом является то, что, поскольку C ++ вообще не применяет концепции, присваивать имена вашим параметрам в соответствии с ожидаемой концепцией. ForwardIter
, таким образом, делает хорошее имя параметра для параметра, чем должен быть прямой итератор.
Конечно, если вы уже используете CamelCase для имен своих классов (Java-программисты - blech: p), вам следует использовать что-то еще.
Когда вы попадаете в сложные экземпляры и тому подобное, вам нужно использовать какой-то метод объявления ваших экземпляров шаблона в несколько строк. При метапрограммировании вам также часто нужно разбивать вещи на несколько строк и / или несколько типов / шаблонов. Это один из тех, кто учится по ходу дела. Мне нравится следующий метод:
template < typename MyParams >
struct my_metafunction
: mpl::if_
<
check // probably wouldn't actually split this one since it's trivial...but as example...
<
MyParams
>
, some_type_expression
, some_other_type_expression
>
{};