爲什麼編譯器找不到匹配read1
?我沒有看到read1
和read2
之間的區別;嵌套typedef模板是否存在類似Foo
類中的限制?C++模板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>&)’
我刪除了多餘的'Internal'命名空間,保持示例簡潔。 – Xeo 2011-12-23 00:36:44
使用G ++ 4.4.5編輯中斷代碼''g ++ -c main.cpp main.cpp:8:錯誤:'typedef類聲明'句柄 Foo :: Handle' main.cpp:3:error:changes在'int main(int,char **)'函數中:''' &)'' –
2011-12-23 01:40:23