如何使分离的模板声明和实现工作?

时间:2016-07-05 19:09:47

标签: c++

我在templates.h中定义了一些模板结构:

//templates.h
#ifndef TEMPLATES_H
#define TEMPLATES_H

template<typename Key = int, typename Value = Key> 
struct array{ 
     map<const Key, Value> data;

     //Stuffs 
};

/*explicit (full) specialization*/

template<>
template<typename Key>
struct array<Key, char>{

    map<const Key, Value> data;

    //Stuffs
};

#include "templates.cpp" 
#endif

尝试将声明(接口)与定义(实现)分开, 我在templates.cpp中做到了这一点:

//templates.cpp
#ifdef TEMPLATES_H
#include "templates.h"
#endif

template<typename Key, char> 
array<Key, char>::array(const Key& k, const char* v){ cout << "specialised array<T, char>"; } 

在main()中,我测试开车:

//inside main();
array<int, char> out(1, "Just testing");      /*error 1: prototype for 'array<Key, char>::array(const Key&, const char*)' does not match any in class 'array<Key, char>'
                                                error 2: candidate is: array<Key, char>::array(const array<Key, char>&)    
                                                */

问题:我期望调用array :: array(Key,char)构造函数;这是array :: array(Key,Value)的显式特化,但得到了上面评论的错误消息。我做错了什么,或者我该如何解决这个问题?。

0 个答案:

没有答案