C++ c++;类外部分特殊化的模板成员函数
这段代码使用的模板成员对于std::vector和其他类型的工作方式不同。到目前为止,它运行良好。但是在类之外为std::vector定义get方法的正确语法是什么?我知道如何使用traits和其他助手来实现这一点,但如果有有效的语法,我希望这是一个简单的解决方案C++ c++;类外部分特殊化的模板成员函数,c++,templates,partial-specialization,C++,Templates,Partial Specialization,这段代码使用的模板成员对于std::vector和其他类型的工作方式不同。到目前为止,它运行良好。但是在类之外为std::vector定义get方法的正确语法是什么?我知道如何使用traits和其他助手来实现这一点,但如果有有效的语法,我希望这是一个简单的解决方案 #包括 #包括 使用名称空间std; 结构 { 模板无效获取(X) { cout-dvec; sx; x、 get(1); x、 get(vec); x、 get(dvec); 返回0; } 这似乎行不通 template
#包括
#包括
使用名称空间std;
结构
{
模板无效获取(X)
{
cout-dvec;
sx;
x、 get(1);
x、 get(vec);
x、 get(dvec);
返回0;
}
这似乎行不通
template void s::get(std::vector v)
{
}
在类外为std::vector定义get方法的正确语法是什么
这将是在类模板中声明它,然后在外部定义它:
struct s {
template < class X >
void get (X x) {
cout << "inner\n";
}
template <class X> // declaration
void get(std::vector<X> v);
};
template <class X> // definition
void s::get(std::vector<X> v) {}
结构{
模板
void get(X){
无法复制。这是正确的,但对于模板void::get(int)这样的函数您可以在类外部完全定义它,而不用在类内部提及它not@Markus我不确定我是否完全理解。您想要什么?样本为Thx,但这仍然声明了类内的特殊get。考虑一下想要添加新“get”的外部用户“std::set的函数…因此在您的示例中,我必须在结构“c”@Markus中添加所有可能的调用。好的,我认为它开始被接受。对不起,我发烧了:)不幸的是,我认为不可能对来自模板void get(X);
template <class X> void s::get(std::vector<X> v)
{
}
struct s {
template < class X >
void get (X x) {
cout << "inner\n";
}
template <class X> // declaration
void get(std::vector<X> v);
};
template <class X> // definition
void s::get(std::vector<X> v) {}