如何解决c ++模板成员函数,在类外进行部分特殊化
此代码使用一个模板成员,该成员对 std::vector 和其他类型的工作方式不同。到目前为止它工作正常。但是在类外为 std::vector 定义 get 方法的正确语法是什么?我知道使用特性和其他帮助程序来实现这一点,但如果有有效的语法,我想要这个简单的解决方案。
#include <iostream>
#include <vector>
using namespace std;
struct s
{
template < class X > void get (X x)
{
cout << "inner\n";
};
template <class X> void get(std::vector<X> vec)
{
cout << "inline any vector\n";
}
};
int main ()
{
std::vector < int >vec;
std::vector< double> dvec;
s x;
x.get (1);
x.get (vec);
x.get(dvec);
return 0;
}
这似乎不起作用
#include <iostream>
#include <vector>
using namespace std;
struct s
{
template < class X > void get (X x)
{
cout << "inner\n";
};
template <class X> void get(std::vector<X> vec)
{
cout << "inline any vector\n";
}
};
int main ()
{
std::vector < int >vec;
std::vector< double> dvec;
s x;
x.get (1);
x.get (vec);
x.get(dvec);
return 0;
}
解决方法
在类外为 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) {}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。