我在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)的显式特化,但得到了上面评论的错误消息。我做错了什么,或者我该如何解决这个问题?。