如何在某些头文件(嵌套类)的 cpp 文件中包含我的实现
Posted
技术标签:
【中文标题】如何在某些头文件(嵌套类)的 cpp 文件中包含我的实现【英文标题】:How to include my implementation in cpp file for some header file (nested classes) 【发布时间】:2014-05-17 16:40:33 【问题描述】:我在尝试整理项目文件 C++ 时遇到问题
我只是在设计一个特定的模板类 Mystackt,我想将整个类包含在 Mystackt 的公共部分中作为迭代器类 MyIterator; 我在我的头文件 MyTemplate.h 中写了所有这些东西 简而言之,它会显示如下
template <class Type> /* that's in file **MyTemplate.h** */
class MyStackt
friend somefunction (int,string,bool);
public:
class iterator
public:
iterator();
void somefunc(param1,param2.....);
void otherfunc(...);
private:
Type* ptr;
;
int public_func_of_stackt(void);
void an-otherfunc(int,string,Type,...etc);
private:
int x;
string y;Type* val;
;
现在让我们看看这个头文件 MyTemplate.cpp 的 cpp 文件 我可以毫无问题地包含 Mytemplate 类的所有成员函数的代码 例如:
template <class Type>
int MyStack<Type>::public_func_of_stackt(void) /*this works perfect*/
implementation goes here ...;
但是当我尝试编写整个类(迭代器类)的成员函数的实现时,问题就开始了
template <class Type>
bool MyStackt<Type>::iterator somefunc(param1,param2.....)
return current ==rhs.current;
先生们的问题是: 如何在 Mytemplate.cpp 文件中包含我的类迭代器成员函数的代码?我应该如何使用该 external::entire 或其他特定符号来编写它? 其他问题: 我如何(在 Mytemplate.cpp 文件中)编写 MyStackt 类的友元函数的实现??
更新#1:谢谢 Veritas
但我还需要知道如何定义 MyStackt 类的一些公共函数 如果该函数返回迭代器类型(所以它返回整个类的对象)
定义看起来像这样
template <class Type>
iterator Stackt<Type>::begin()
return *this; /*this function did not work*/
也许我需要使用一些特定的符号 4 吗?如果我有多个嵌套类怎么办 等待专家的答复 提前谢谢你!
【问题讨论】:
如果你想检查我的编辑。 模板 MyStackt 类和迭代器类很大,它们有多个构造函数和函数 我将一些代码移动到单独的文件中,这样以后维护它们会更容易 MyStackt 的返回迭代器的函数当我在 MyStackt 范围内编写他们的代码时,对象工作得很好 - 正如你所提到的,但是当我试图将此代码移动到 cpp 和 .h 文件模板您在定义 somefunc 时忘记了范围解析运算符。定义应该是:
template <class Type>
bool MyStackt<Type>::iterator::somefunc(param1,param2.....)
return current == rhs.current;
至于友元函数,您可以像定义任何其他全局函数一样定义它。
您的编辑:
迭代器类属于 MyStackt 的作用域,因此当您需要在 MyStackt 之外提及它时,您需要使用作用域运算符。至于您的问题,我不确定您要做什么。 *this 返回 MyStackt 类型的实例化对象。
还要小心!如果您想分开您的定义,请使用 .inl 文件或类似文件,而不是在 cpp 文件中。
【讨论】:
以上是关于如何在某些头文件(嵌套类)的 cpp 文件中包含我的实现的主要内容,如果未能解决你的问题,请参考以下文章
“配置”脚本如何检测我的系统是不是支持某些头文件或 cpp 功能?