Potrei ovviamente usare is_base
se la classe base in cui non è un modello. Tuttavia, quando lo è, non vedo alcun modo per abbinare genericamente qualsiasi tipo derivato. Ecco un esempio di base di ciò che intendo:È possibile abbinare la base basata su modello nelle specializzazioni di modelli?
#include <boost/mpl/bool.hpp>
template < typename T >
struct test_base
{
};
template < typename T >
struct check : boost::mpl::false_ {};
template < typename T >
struct check<test_base<T> > : boost::mpl::true_ {};
struct test_derived : test_base<int> {};
#include <iostream>
int main()
{
std::cout << check<test_derived>::value << std::endl;
std::cin.get();
}
voglio che per tornare true_
piuttosto che false_
. L'esempio reale ha come 7 parametri di modello, la maggior parte di default, e usa Boost.Parameter per riferirsi ad essi per nome. Per poter utilizzare is_base
avrei dovuto essere in grado di tirare i parametri in qualche modo e non vedo un modo di fare che a corto di dichiarazione typedef interni.
penso che sia impossibile. Cercando di essere smentiti.
è possibile introdurre unico tipo di tag nella base di prova e abilitare/disabilitare basano su questo? – Anycorn
Questa è una valida opzione che avrei dovuto pensare a me stesso. Ancora interessato se chiunque può trovare un modo per aggirare senza però. –
@aaa - dovresti fare una risposta. Hai la sensazione che sia l'unico metodo possibile, quindi in un paio di giorni dopo che non avrò risposta potresti anche averne il merito. –