为什么在模板头的末尾添加.cpp不是循环依赖?

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)

谢谢.

NPE*_*NPE 5

暂且不论这种技术的优点,你问题中的代码是有效的,因为包含了防护:

#ifndef MYMAP
#define MYMAP
...
#endif
Run Code Online (Sandbox Code Playgroud)

第二次.h包括它,它实际上是一个无操作,因为MYMAP已经定义了第一次.

PS不要using namespace std在头文件中.包含此标头的任何代码都会将整个std命名空间带入当前范围,而不管它们是否需要它.