我想要定义一个模板函数谁有一个类型参数和一个非类型的参数。但是,非类型参数的类型取决于类型参数。它看起来像如下:非类型的模板参数,其类型取决于另一个参数
template<typename T>
class A{
typedef T* Pointer;
};
template<typename T, A<typename T>::Pointer P>
T fun(){
return *P;
}
int main(){
fun<int, (int*)0>();
}
如果我编译代码,编译器会抱怨:
test.cpp:6:34: error: template argument 1 is invalid
template<typename T, A<typename T>::Pointer P>
^
test.cpp:6:45: error: expected ‘>’ before ‘P’
template<typename T, A<typename T>::Pointer P>
^
我应该怎么做才能让我的代码工作?谢谢!
PS。上面的代码只是结构的一个例子。我知道代码本身是没有意义的。
谢谢!你能解释一下或者给出一个关于在这种情况下为什么需要'typename'的参考吗? – james
http://stackoverflow.com/a/8584507/481267 – Brian