2

我是 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::

4

3 回答 3

4

好吧,这段代码对我来说看起来不错。

在声明中写一次它们并不是什么大问题。

在定义中,如果你想省略写作ns::,你可能有using namespace ns; 一个 function

或者,只包含一些名称,例如:using ns::name;. 但我不会那样做。

于 2012-10-16T15:32:05.447 回答
2

您还可以使用 typedef:

typedef std::string string;

它的优点是不使用using

于 2012-10-16T15:56:56.863 回答
1

不必键入限定符 ( std::, boost::)的选项具有using指令。如果有任何其他方式(在这种情况下没有),它会带来与拥有指令相同的问题using,所以任何一种选择都会同样糟糕。

请注意,using不必将其应用于命名空间。例如,您可以执行以下操作:

using std::string;

然后直接使用string,但也不建议这样做。

于 2012-10-16T15:29:59.610 回答