【发布时间】:2015-03-08 05:46:23
【问题描述】:
我想为指针模板参数和其他参数类型定义一个成员函数。我尝试了以下代码:
#include <iostream>
template <class T, class W>
struct A
{
void foo();
};
template<class T, class W> void A<T*, W*>::foo(){ std::cout << "foo" << std::endl; }
int main(){ }
目前尚不清楚为什么它不起作用。我将指针模板参数按照它们在模板声明中指定的顺序放置。其实N4296::14.5.1/3 [temp.class]:
类模板名称后面的模板参数列表 成员定义应以与参数相同的顺序命名参数 在成员的模板参数列表中使用。
那么为什么代码不起作用?我把参数按相同的顺序排列。
【问题讨论】:
-
改用
... void A<T, W>::foo() { ...,即去掉星号。 -
@JoachimPileborg 去掉星号可以为任何
T、W定义foo,而不仅仅是指针。 -
啊,所以你想要函数的专业化?但是,您不能只专门化单个成员函数,您必须专门化整个结构。
-
@JoachimPileborg 好的,我明白了。现在我想以正式的方式理解为什么它如此正式。没有参考资料吗?
-
@JoachimPileborg BTW,为什么下面的代码可以正常工作link。