Re: template problem: local variable as non-type argument
"vl106" <vl106@hotmail.com> writes:
The question is: how shall I realize it differently as follows [pseudo
code]:
if(i == 1)
return C<1>();
if(i == 2)
return C<2>();
// ... maintenance nightmare ...
vs
Base& Factory::createInstance(int i) {
// PROBLEM:
// error C2971: 'C' : template parameter 'T' : 'i' : a local variable
cannot be used as
// a non-type argument
// WORKS: int const val = 0;
return C<i>(); //ignore warning: returning address of local variable or
temporary
That's a rather serious warning you're ignoring.
}
void main() {
Base& anInstance = Factory::createInstance(1);
Base& anotherInstance = Factory::createInstance(2);
}
What is it you are actually trying to do? How do C<1> and C<2> differ?
Do all the C<some-int-value> specializations actually exist and make
sense, or only those you've explicitly specialized?
Without further information, if the list is limited, I'd go with the
switch. You could probably remove the duplication with some preprocessor
magic such as that in the Boost Preprocessor library.
Anthony
--
Author of C++ Concurrency in Action | http://www.manning.com/williams
just::thread C++0x thread library | http://www.stdthread.co.uk
Just Software Solutions Ltd | http://www.justsoftwaresolutions.co.uk
15 Carrallack Mews, St Just, Cornwall, TR19 7UL, UK. Company No. 5478976
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]