2014-09-21 4 views
1

У меня есть шаблонная структура, которая сопоставляет идентификатор типа с использованием специализированной специализации (взято из https://www.justsoftwaresolutions.co.uk/articles/exprtype.pdf).C++ Template Параметр, который оценивает шаблон (параметр шаблона шаблона)

template<int id> 
struct IdToType 
{}; 
template<> 
struct IdToType<1> 
{ 
typedef bool Type; 
}; 
template<> 
struct IdToType<2> 
{ 
typedef char Type; 
}; 

Теперь я хочу, чтобы вызвать функцию как этот ПолучитьЗначения()

где возвращаемое значение функции является соответствующим типом идентификатора.

template</*.... I don't know what to put here...*/ T> 
idToType<T>::Type getValue() // I don't know exactly how to define the return value 
{ 
    // whant to do some things with the provided ID and with the type of the id 
} 

Так короче: - Я хочу шаблонные функции, где я могу использовать идентификатор в качестве аргумента шаблона. - Функция должна иметь тип, соответствующий идентификатору в качестве возвращаемого значения (я получаю соответствующий тип из IdToType :: Type). - В теле функции я хочу иметь доступ к ID и типу идентификатора. - Я думаю, это должно быть возможно с шаблонами шаблонов шаблонов. Но я не уверен в этом.

Я надеюсь, что это somwhat ясно ...

Заранее спасибо!

ответ

4
template <int id> 
typename IdToType<id>::Type getValue() 
{ 
    using T = typename IdToType<id>::Type; 
    return 65; 
} 

DEMO

+0

Спасибо! Это помогло ... – woodtluk

1

Этот код дает предупреждение о том, что переменная 'Вал' не используется. Но поскольку мы не делаем то, что вы хотите сделать с типом внутри getValue(), я оставил код таким образом.

char getValueImpl(char) 
{ 
    return 'c'; 
} 


bool getValueImpl(bool) 
{ 
    return true; 
} 

template<int X> 
typename IdToType<X>::Type getValue() 
{ 
    typename IdToType<X>::Type val; 
    return getValueImpl(val); 

} 


int main() 
{ 

    std::cout << getValue<2>() << "\n"; 
    std::cout << getValue<1>() << "\n"; 

} 
Смежные вопросы