在头文件中定义的模板类成员函数中使用命名空间 我是C++新手,但我理解在头文件中使用使用命名空间< /Cord>关键字是不好的。我正在尝试编写一个模板类,并且已经读到模板类成员函数的定义必须在标题中,并且所有模板代码必须在同一位置。我的问题是,如果不使用名称空间关键字,那么编写所有代码可能会变得很乏味。例如,目前我有: #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_ */ \ifndef RANDOMTREE\u H_ #定义随机树_ 模板 类随机树{ 私人: typedef double(*function_ptr)(T,T); 公众: 随机树(std::vector数据,std::vector){ ... } 无效列树(); }; #endif/*随机树*/

在头文件中定义的模板类成员函数中使用命名空间 我是C++新手,但我理解在头文件中使用使用命名空间< /Cord>关键字是不好的。我正在尝试编写一个模板类,并且已经读到模板类成员函数的定义必须在标题中,并且所有模板代码必须在同一位置。我的问题是,如果不使用名称空间关键字,那么编写所有代码可能会变得很乏味。例如,目前我有: #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_ */ \ifndef RANDOMTREE\u H_ #定义随机树_ 模板 类随机树{ 私人: typedef double(*function_ptr)(T,T); 公众: 随机树(std::vector数据,std::vector){ ... } 无效列树(); }; #endif/*随机树*/,c++,templates,header-files,C++,Templates,Header Files,但是我打算在函数体内部使用一些boost方法等,我想知道是否有一种方法不必一直键入前缀std:和boost:不必键入限定条件的选项(std:,boost:)是具有使用指令的。如果有任何其他方法(在本例中没有),它将带来与使用指令的相同的问题,因此任何一种方法都同样糟糕 请注意,使用不必应用于命名空间。例如,您可以执行以下操作: using std::string; 然后直接使用string,但这也不推荐使用。嗯,这段代码在我看来相当不错 在声明中写一次也没什么大不了的 在定义中,如果您想省略写

但是我打算在函数体内部使用一些boost方法等,我想知道是否有一种方法不必一直键入前缀
std:
boost:

不必键入限定条件的选项(
std:
boost:
具有使用指令的
。如果有任何其他方法(在本例中没有),它将带来与使用
指令的
相同的问题,因此任何一种方法都同样糟糕

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

using std::string;

然后直接使用
string
,但这也不推荐使用。

嗯,这段代码在我看来相当不错

在声明中写一次也没什么大不了的

在定义中,如果您想省略写入
ns::
,则可以使用命名空间ns编写
在函数内部


或者,只包含一些名称,例如:
使用ns::name。但我不会这么做。

您也可以使用typedef:

typedef std::string字符串


它的优点是不使用
using

好的,只是要明确一点:就模板类而言,我必须在头文件中实现成员函数,这就增加了不使用using指令的约束?@Aly yes。对使用指令没有任何限制,只是不赞成。我只保留这些限定条件。@Aly-因为如果我阅读了其他人的代码,我想知道他们使用的是哪个名称(他/她使用的),来自哪个名称空间。假设您有许多通用名称,如
String
,或
Thread
,或
Pipe
,等等-了解它们的名称空间很好,特别是在大型项目中-所有这些名称都可以在
boost
、在
std
、在其他库中定义,或者只是在当前项目的本地名称中定义。