yun*_*awa 11 c++ templates struct
在.cpp文件中的模板类(struct)中编写非模板方法的实现是否可行?我已经读过模板方法应该写在.h上,但我的方法不是模板方法,尽管它属于模板类.这是我的.h中的代码:
#include <iostream>
#ifndef KEY_VALUE_H
#define KEY_VALUE_H
using namespace std;
namespace types
{
template <class T, class U>
struct key_value
{
T key;
U value;
static key_value<T, U> make(T key, U value)
{
key_value<T, U> kv;
kv.key = key;
kv.value = value;
return kv;
};
string serialize()
{
// Code to serialize here I want to write in .cpp but fails.
}
};
}
#endif /* KEY_VALUE_H */
Run Code Online (Sandbox Code Playgroud)
我试着serialize()在.cpp文件中编写方法的实现,如下所示:
#include "key_value.h"
using namespace types;
template <class T, class U>
string key_value<T, U>::serialize()
{
// Code here returning string
}
Run Code Online (Sandbox Code Playgroud)
结束错误: Redefinition of 'serialize'
这样做的正确方法是怎样的?
这不可能*.想一想为什么模板首先需要在头文件中:这样使用从模板实例化的代码的每个.cpp文件都可以访问它(模板只按需实例化).
因此,在某种程度上,您可以将类模板视为数据布局的模板(数据成员)以及一组模板,每个模板用于每个成员函数.因此,模板类的所有成员都被视为模板.您甚至可以显式地专门化类模板的成员函数.
*与往常一样,如果显式实例化是一个选项,您可以在.cpp文件中定义成员函数,并在该.cpp文件中提供所有必需的expicit实例化.
| 归档时间: |
|
| 查看次数: |
2424 次 |
| 最近记录: |