【发布时间】:2017-08-15 05:36:32
【问题描述】:
我正在尝试将模板化方法添加到模板化类。我提到了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) {
关于我为什么会收到此错误或我可能做错了什么的任何建议?
【问题讨论】:
-
如果您尝试专门针对
tester<int>,则删除typename v并将int用于lhs参数 -
我想看看是否可以模板化方法
tester。如果稍后我希望lhs成为string类型怎么办? -
那你不是在尝试部分专业化,那为什么你有
tester<int>而不是tester<v>? -
我不想部分专门化方法测试器。我想知道是否可以在模板化类中模板化方法?链接说是
-
那么你需要删除
<int>部分。首先,你从哪里得到int?其次,你不能对成员函数进行部分特化,所以你想要这个:template<typename t,typename u> <typename v> foo<t,u>::tester(v lhs) { /*...*/ }