Pour une raison quelconque mon comprend continuer à briser mais pas dans l'aperçu = [
#include <ostream>
#include <iostream>
#include <boost/function.hpp>
// Assume that you want to print out "Function is N-arity" for general case. But "nularity" for 0
template< int i >
struct DarkSide
{
template<class U>
void operator()(std::ostream& out, const U& u) { out << "Function is "<<i<<"-arity"<<u; }
void operator()(std::ostream& out, std::ostream& (*pf)(std::ostream&)) { out << "Function is "<<i<<"-arity"<<pf; }
};
template<>
struct DarkSide<0>
{
template<class U>
void operator()(std::ostream& out, const U& u) { out << "Function is nularity"<<u; }
void operator()(std::ostream& out, std::ostream& (*pf)(std::ostream&)) { out << "Function is nularity"<<pf; }
};
int main() {
typedef boost::function< void () > vFv;
typedef boost::function< void (int x) > vFi;
DarkSide<vFv::arity>()(std::cout,"\n");
DarkSide<vFi::arity>()(std::cout,std::endl);
}
Le préprocesseur n'a pas de concept de types ou de valeurs, à l'exception des entiers . Il n'a aucune idée de ce qu'est une fonction. – GManNickG
Seuls les modèles vous donnent une branche de compilation, pas le préprocesseur qui s'exécute comme une étape distincte avant la compilation. –