我试图定义一个模板函数谁有一个类型参数和非类型参数。然而,非类型参数的类型取决于类型参数。它看起来像这样:
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>
^
我应该怎么做才能使我的代码工作?谢谢你!
p。上面的代码只是该结构的一个示例。我知道代码本身是没有意义的
你几乎把typename
放在了正确的位置。
template<typename T, typename A<T>::Pointer P>
同时,Pointer
typedef
也需要公开,这样才能正常工作。
当你修复语法和访问控制时,它可以工作:
template<typename T>
class A
{
public: // must be accessible!
typedef T* Pointer;
};
template<typename T, typename A<T>::Pointer P> // like this
T fun()
{
return *P;
}
int main()
{
fun<int, (int*)0>();
}