Ich habe mir mal vorgenommen mich mit Template Meta Programmierung auseinanderzusetzen. Wollte mal versuchen z.B. einen T** zu T zu dereferenzieren. Nur habe ich irgendwie keine Ahnung wie ich das anstellen soll. Ich kann von T** auf T* oder von T* auf T dereferenzieren (also auch von T** auf T nur das dafür müsste ich die Funktion 2 mal hintereinander aufrufen), aber ich würde gerne eine Funktion haben die N mal dereferenziert. Hat jemand eine Ahnung wie man das implementieren könnte ? Als Funktionsdefinition würde ich sowas benutzen:
Code:
template<typename T, int i, int n>
typename ptr_holder<T, i - n>::type dereference_ptr(typename ptr_holder<T, i>::type pointer)
{
// ???
}
Code:
template<typename T, int i>
struct ptr_holder
{
typedef typename boost::add_pointer<typename ptr_holder<T, i - 1>::type>::type type;
};
template<typename T>
struct ptr_holder < T, 1 >
{
typedef typename boost::add_pointer<T>::type type;
};
template<typename T>
struct ptr_holder < T, 0 >
{
typedef T type;
};
template <typename T, int i>
typename ptr_holder<T, i - 1>::type dereference_ptr(typename ptr_holder<T, i>::type pointer)
{
return *pointer;
}
int main(int argc, char** ppArgv)
{
ptr_holder<char, 2>::type ppTest = new char*("Test");
ptr_holder<char, 1>::type pTest = dereference_ptr<char, 2>(ppTest);
std::cout << pTest << std::endl;
return 0;
}






