在模板化类中声明模板化方法

时间:2017-08-15 05:36:33

标签: c++ templates

我正在尝试将模板化方法添加到模板化类中。我提到了this,但是语法不起作用。我添加了第二个名为tester的方法,我想模​​仿它。这就是我所拥有的

template <typename t,typename u>
struct foo {

    void test();

    template<typename v>
    void tester(v lhs);
};

template<typename t,typename u>
void foo<t,u>::test() {
    std::cout << "Hello World" ;
}

template<typename t,typename u>
template<typename v>
void foo<t,u>::tester<v>(v lhs) {
    std::cout << "Hello world " << lhs ;
}

int main() 
{
    foo<int,int> t;
    t.test();  
    t.tester<int>(12);
}

我收到方法tester的错误,这是我得到的错误

  main.cpp:20:31: error: non-type partial specialization 'tester<v>' is not allowed
 void foo<t,u>::tester<v>(v lhs) {

有关我为什么会收到此错误或我可能做错了什么的任何建议?

1 个答案:

答案 0 :(得分:1)

在下面的更正代码中内联注释:

#include <iostream>

template <typename t,typename u>
struct foo {

    void test();

    template<typename v>
    void tester(v lhs);
};

template<typename t,typename u>
void foo<t,u>::test() {
    std::cout << "Hello World" ;
}

/*
 * change made to this template function definition
 */
template<typename t,typename u>
template<typename v>
void foo<t,u>::tester(v lhs) {
    std::cout << "Hello world " << lhs ;
}

int main() 
{
    foo<int,int> t;
    t.test();  
    t.tester<int>(12);
}