Pra*_*ari -2 c++ templates circular-dependency c++11
我不敢问为什么我需要在模板声明.cpp结束.h时添加.因为它已在StackOverflow中多次回答.
但我的问题是,当我在标题末尾添加.cpp时,为什么它不是循环依赖,或者编译器如何不继续添加.cpp进入.h和.h进入.cpp?
C++ 11是否试图解决这个奇怪的模板要求?
@Edit:只包含头文件
#ifndef MYMAP
#define MYMAP
#include <iostream>
#include <string>
using namespace std;
template<typename ValType>
class MyMap
{
public:
MyMap();
~MyMap();
void add(string key, ValType val);
ValType getValue(string key);
private:
static const int NumBuckets = 99;
struct cellT
{
string key;
ValType val;
cellT* next;
};
cellT *buckets[NumBuckets];
int hash(string key, int numBuckets);
cellT* findCellForKey(string key, cellT *head);
MyMap(MyMap&);
MyMap operator = (MyMap&);
};
#include "MyMap.cpp" //included .cpp
#endif
Run Code Online (Sandbox Code Playgroud)
@Edit 2:MyMap.cpp
#include "MyMap.h"
//rest of the code
Run Code Online (Sandbox Code Playgroud)
谢谢.
暂且不论这种技术的优点,你问题中的代码是有效的,因为包含了防护:
#ifndef MYMAP
#define MYMAP
...
#endif
Run Code Online (Sandbox Code Playgroud)
第二次.h包括它,它实际上是一个无操作,因为MYMAP已经定义了第一次.
PS不要using namespace std在头文件中.包含此标头的任何代码都会将整个std命名空间带入当前范围,而不管它们是否需要它.
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |