Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 13:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Metaprogramming dereference pointer

Discussion on Metaprogramming dereference pointer within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Metaprogramming dereference pointer

Hallo Leute.

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)
{
	// ???
}
Hier ist der code den ich bis jetzt habe:
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;
}
Ich hoffe jemand kann mir helfen. Würde mich auch sehr über Verbesserungsvorschläge von meinem jetzigen Code freuen.
th0rex is offline  
Old 09/18/2014, 18:38   #2
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Funktionen können nicht partiell spezialisiert werden, nur Klassen. Daher die Helfer-Klasse.
Die ptr_holder-Klasse ist nicht notwendig. Theoretisch ist es nicht einmal notwendig, dass die zu dereferenzierende Klasse ein Zeiger ist, wie viele Iteratoren zeigen. Aber das richtig zu implementieren (mit const und rvalue-this) ist nicht ganz einfach.
Tasiro is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Frage: Wie findet man zB UG Pointer?Speed pointer?
03/30/2010 - Kal Online - 2 Replies
kann mir einer sagen wie man UG/Speed pointer finden kann usw^^´ß#



All times are GMT +1. The time now is 13:41.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.