为什么编译器找不到与read1
匹配的内容?我没有看出read1
和read2
之间的区别;像Foo
类中的嵌套typedef模板一样,是否存在限制?
template<typename T>
class Handle{};
class Foo{
public:
typedef Handle<Foo> Handle;
};
template<typename T>
void read1(typename T::Handle){}
template<typename T>
void read2(Handle<T>){}
int main(int argc, char** argv)
{
Foo::Handle f1;
read1(f1);
Foo::Handle f2;
read2(f2);
}
G++编译器输出(G++ 4.4.5)
g++ -c -I. main1.cpp
main1.cpp: In function ‘int main(int, char**)’:
main1.cpp:37: error: no matching function for call to ‘read1(Handle<Foo>&)’
g++ -c main.cpp main.cpp:8: 错误:声明 ‘typedef class Handle<Foo> Foo::Handle’ main.cpp:3: 错误:改变了‘Handle’的含义,从‘class Handle<Foo>’变为其他含义 main.cpp: 在函数‘int main(int, char**)’中: main.cpp:27: 错误:没有找到与‘read1(Handle<Foo>&)’匹配的函数
- José