KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
suppose I have these declarations template<typename T> class User; template<typename T> class Data; and want to implement User<> for T = Data<some_type> and any class derived from Data<some_type> but also allow for other specialisations defined elsewhere. If I didn't already have the declaration of the class template User<> , I could simply template<typename T, typename A= typename std::enable_if<is_Data<T>::value>::type> class User { /*...*/ }; where template<template<typename> data>> struct is_Data { static const bool value = /* some magic here (not the question) */; }; However, this has two template parameters and thus clashes with the previous declaration, where User<> is declared with only one template parameter. Is there anything else I can do? (Note template<typename T, typename A= typename std::enable_if<is_Data<T>::value>::type> class User<T> { /*...*/ }; doesn't work ( default template arguments may not be used in partial specializations ), nor does template<typename T> class User<Data<T>> { /*...*/ }; as it doesn't allow types derived from Data<> , neither does template<typename T> class User<typename std::enable_if<is_Data<T>::value,T>::type> { /*...*/ }; since template parameter T is not used in partial specialization .)
Tags (comma-separated)
Save Edits
Cancel