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

Я новичок в 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::

2

Решение

Ну, этот код выглядит довольно хорошо для меня.

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

В определениях, если вы хотите опустить запись ns::, ты можешь иметь using namespace ns; внутри функции.

Или просто включите несколько имен, например: using ns::name;, Но я бы не стал этого делать.

4

Другие решения

Вы также можете использовать typedef:

typedef std::string string;

Преимущество не в использовании using

2

Варианты отсутствия необходимости набирать квалификацию (std::, boost::) является имеющий using директивы. Если бы был какой-либо другой путь (в данном случае его нет), он бы имел ту же проблему, что и наличие using директивы, поэтому любая альтернатива будет одинаково плохой.

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

using std::string;

а затем напрямую использовать string, но это также не рекомендуется.

1
По вопросам рекламы [email protected]