2014-04-22 164 views
1

下面的代碼失敗下克++編譯,用下面的錯誤:找到的模板的模板功能否匹配

「爲調用沒有匹配的函數‘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下編譯。

在此先感謝。

回答

4

GetRecById的第二個參數是一個模板,但您試圖傳遞一個類型。您需要:

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