2010-01-07 175 views
1

我有以下模板類,在.hpp文件中聲明的.hpp文件末尾包含的.inl文件中的實現聲明。 它有一個模板化的複製構造函數,但我不知道也找不到在.inl文件中實現模板化複製構造函數的正確語法。有誰知道這個正確的語法?模板類中的模板成員函數的定義(C++)

內容Foo.hpp的

template <class X> 
class Foo 
{ 
public: 
    explicit Foo(Bar* bar);  

    //I would like to move the definition of this copy ctor to the .inl file 
    template <class Y> explicit Foo(Foo<Y> const& other) : 
     mBar(other.mBar) 
    { 
     assert(dynamic_cast<X>(mBar->someObject()) != NULL); 
     //some more code 
    } 

    void someFunction() const; 

private: 
    Bar* mBar; 
} 
#include Foo.inl 

Foo.inl

template <class X> 
Foo<X>::Foo(Bar* bar) : 
    mBar(bar) 
{ 
    //some code 
} 

template <class X> 
Foo<X>::someFunction() 
{ 
    //do stuff 
} 

回答

4

的內容對於構造你有兩個嵌套的模板,你必須同時指定當你在.INL定義它文件:

template <class X> 
template <class Y> 
Foo<X>::Foo(Foo<Y> const& other) : mBar(other.mBar) { 
    assert(dynamic_cast<X>(mBar->someObject()) != NULL); 
    //some more code 
}