Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;类外部分特殊化的模板成员函数_C++_Templates_Partial Specialization - Fatal编程技术网

C++ c++;类外部分特殊化的模板成员函数

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::vector和其他类型的工作方式不同。到目前为止,它运行良好。但是在类之外为std::vector定义get方法的正确语法是什么?我知道如何使用traits和其他助手来实现这一点,但如果有有效的语法,我希望这是一个简单的解决方案


#包括
#包括
使用名称空间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) {}