以下代码无法在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下编译。
提前致谢。
答案 0 :(得分:4)
GetRecById
的第二个参数是模板,但您尝试传递类型。你需要:
GetRecById< int, DummyLookup >( rec, nullptr );
// ^ Note, no template argument here