找不到模板模板功能的匹配项

时间:2014-04-22 12:37:59

标签: c++ templates template-templates

以下代码无法在g ++下编译,并出现以下错误:

"没有匹配函数来调用' GetRecById(int&,NULL)'":

template < typename T >
struct DummyLookup
{ 
    static bool DoLookup( T& rec, const char* id )
    {
        rec = 123;
        return true;
    }
};

template < typename T,
           template <class> class LookupPolicy
         >  
static bool GetRecById( T& rec, const char* id )
{        
    return LookupPolicy<T>::DoLookup( rec, id );
} 

static void testLookup( void )
{        
    int rec = 0;
    const bool ret = GetRecById< int, DummyLookup<int> >( rec, NULL );

    std::cout << "rec = " << rec << std::endl; // should be 123
} 


int main()
{                          
    testLookup();

    return 0;
}

目的是GetRecById()支持使用不同的记录查询策略进行实例化,例如用于单元测试目的。

我在这里做错了什么? FWIW,它确实在Sun Studio 10下编译。

提前致谢。

1 个答案:

答案 0 :(得分:4)

GetRecById的第二个参数是模板,但您尝试传递类型。你需要:

GetRecById< int, DummyLookup >( rec, nullptr );
//                          ^ Note, no template argument here