
Agoston Bejo wrote:
Hi all, I am trying to enable only two version of a function. The caller may choose one
of the two versions by specifying a template parameter. I've got two versions
#include <iostream> #include <boost/utility/enable_if.hpp> #include <boost/type_traits.hpp>
using namespace std; using namespace boost;
template<unsigned int N, typename T> enable_if_c<N==1> f(T t) { cout << 1 << endl; }
template<unsigned int N, typename T> enable_if_c<N==2> f(T t) { cout << 2 << endl; }
int _tmain(int argc, _TCHAR* argv[])
_tmain, _TCHAR ... what are these funny symbols? ;-)
{ f<1>(10); // ERROR f<2>(5.5); // ERROR f<3>(7); // ERROR return 0; }
I'd say enable_if is not the right tool for this situation. Try: template<int N> struct f_impl { template<typename T> static void execute(T t) { cout << "f_impl::execute()" << "\n"; } }; template<int N, typename T> void f(T t) { f_impl<N>::execute(t); } template<> struct f_impl<1> { template<typename T> static void execute(T t) { cout << "1" << "\n"; } }; template<> struct f_impl<2> { template<typename T> static void execute(T t) { cout << "2" << "\n"; } }; int main() { f<1>(10); f<2>(5.5); f<3>(7); return 0; } Jonathan