源文件中定义的模板功能

时间:2018-06-28 06:14:18

标签: c++

我已经看到了堆栈上的所有其他帖子都出现了这个确切的问题,但是我想知道它是否在C ++ 17 /稍早的时候有所更改(也许使用了extern关键字)

这是针对那些陌生人的场景:

/// Foo.hpp
namespace Foo
{
    class CFoo
    {
    public:
        template< typename T > T fnFoo( T );
    };

    int fnFooInt( int );
}

/// Foo.cpp
template< typename T > T Foo::CFoo::fnFoo( T x ) // doesn't work
{
    return x;
}

int fnFooInt( int iFoo ) // works
{
    return iFoo;
}

一种解决方案是声明使用了哪些模板(哪种破坏了模板的目的)。另一个如下:

/// Bar.hpp
namespace Bar
{
    class CBar
    {
    public:
        template< typename T > T fnBar( T );
    };

    int fnBarInt( int );
}

/// Bar.tpp
template< typename T > T Bar::CBar::fnBar( T x ) // works
{
    return x;
}

/// Bar.cpp
int fnBarInt( int iBar ) // works
{
    return iBar;
}

0 个答案:

没有答案