模板化类中模板化成员函数的定义(C ++)

时间:2010-01-07 03:27:28

标签: c++ templates

我有一个模板化的类,在.hpp文件中声明,其实现位于.hpp文件末尾的.inl文件中。 它有一个模板化的复制构造函数,但我不知道也无法找到在.inl文件中实现模板化复制构造函数的正确语法。有谁知道这个的正确语法?

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
}

1 个答案:

答案 0 :(得分:5)

对于构造函数,您有两个嵌套模板,并且必须在.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
}