Although I’m doubtful, I’m curious as to whether it’s possible to extract primitive-type template parameters from an existing type, perhaps using RTTI.
For example:
typedef std::bitset<16> WordSet;
Would it be possible to extract the number 16 in the above code without hard-coding it elsewhere? Compiler specific implementations are welcome, though I’m particularly interested in g++.
It’s not possible in general to pick arbitrary template parameters.
However, the usual way you do it is this:
and for types
You can access it then as
foo<39>::valueorfoo<int>::type.If you have a particular type, you can use partial template specialization:
The same principle is possible for type parameters too, indeed. Now you can pass any bitset to it, like
steal_it< std::bitset<16> >::value(note to use size_t, not int!). Because we have no variadic many template paramters yet, we have to limit ourself to a particular parameter count, and repeat the steal_it template specializations for count from 1 up to N. Another difficulty is to scan types that have mixed parameters (types and non-types parameters). This is probably nontrivial to solve.If you have not the type, but only an object of it, you can use a trick, to still get a value at compile time:
The trick is to make the function template auto-deduce the type, and then return a reference to a character array. The function doesn’t need to be defined, the only thing needed is its type.