KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Consider the following class, with the inner struct Y being used as a type, eg. in templates, later on: template<int I> class X{ template<class T1> struct Y{}; template<class T1, class T2> struct Y{}; }; Now, this example will obviously not compile, with the error that the second X<I>::Y has already been defined or that it has too many template parameters. I'd like to resolve that without (extra) partial specialization, since the int I parameter isn't the only one and the position of it can differ in different partial specializations (my actual struct looks more like this , the above is just for simplicity of the question), so I'd like one class fits every I solution. My first thought was obviously enable_if , but that seems to fail on me, eg. I still get the same errors: // assuming C++11 support, else use boost #include <type_traits> template<int I> class X{ template<class T1, class = std::enable_if<I==1>::type> struct Y{}; template<class T1, class T2, class = std::enable_if<I==2>::type> struct Y{}; }; So, since enable_if fails, I hope there is another way to achieve the following compile time check: template<int I> class X{ __include_if(I == 1){ template<class T1> struct Y{}; } __include_if(I == 2){ template<class T1, class T2> struct Y{}; } }; It would just be to save me a lot of code duplication, but I'd be really happy if it was somehow possible. Edit: Sadly, I can't use the obvious: variadic templates, as I'm using Visual Studio 2010, so only the C++0x stuff that is supported there I can use. :/
Tags (comma-separated)
Save Edits
Cancel