Я новичок в C ++, но, как я понимаю, плохо использовать using namespace
ключевые слова в заголовочных файлах. Я пытаюсь написать класс шаблона, и прочитал, что определение функций-членов класса шаблона должно быть в заголовке, а также весь код шаблона должен быть в том же месте. Моя проблема в том, что это может стать утомительным написанием всего кода без using namespace
ключевые слова. Например, на данный момент у меня есть:
#ifndef RANDOMTREE_H_
#define RANDOMTREE_H_
template<class T>
class RandomTree {
private:
typedef double (*funcion_ptr) (T, T);
public:
RandomTree(std::vector<T> data, std::vector<funcion_ptr>){
...
}
void train_tree();
};
#endif /* RANDOMTREE_H_ */
Но я намерен использовать некоторые методы повышения и т. Д. Внутри тел функций и хотел бы знать, есть ли способ не набирать префиксы std::
а также boost::
Ну, этот код выглядит довольно хорошо для меня.
Нет ничего сложного, чтобы написать их один раз в декларациях.
В определениях, если вы хотите опустить запись ns::
, ты можешь иметь using namespace ns;
внутри функции.
Или просто включите несколько имен, например: using ns::name;
, Но я бы не стал этого делать.
Вы также можете использовать typedef:
typedef std::string string;
Преимущество не в использовании using
Варианты отсутствия необходимости набирать квалификацию (std::
, boost::
) является имеющий using
директивы. Если бы был какой-либо другой путь (в данном случае его нет), он бы имел ту же проблему, что и наличие using
директивы, поэтому любая альтернатива будет одинаково плохой.
Обратите внимание, что using
не должен применяться к пространству имен. Вы можете, например, сделать:
using std::string;
а затем напрямую использовать string
, но это также не рекомендуется.