2014-04-22 3 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 
Смежные вопросы