Bazı argümanlarla başka bir işlev (veya functor), f
çağıran marshal_and_apply
, bir işlev yapıyorum bir uygulama var. marshal_and_apply
'un görevi, f
parametresinin türüne bağlı olarak argümanlar için bazı özel marshaling uygulamaları yapmaktır. f
sitesindeki parametrelerden biri özel bir türü, marshal_me<T>
arasında iseBir fonksiyonun parametrelerinin türleri nasıl denetlenir?
, daha sonra marshal_and_apply
f
geçirmeden önce, bazı özel ayrılmış depolama yoluyla parametre sıralamakta olacaktır. Tahsisi gerçekleştirmek için, tüm parametrelerin depolama gereksinimleri, herhangi bir sıraya girmeden önce marshal_and_apply
ile bilinmelidir.
Bazı örnekler:
template<typename Function, typename... Args>
void marshal_and_apply(Function f, Args... args);
void func1(int x, int y);
void func2(marshal_me<int> x, int y);
void func3(marshal_me<int> x, marshal_me<int> y, marshal_me<int> z);
// this call would be equivalent to:
// func1(7,13)
marshal_and_apply(func1, 7, 13);
// this call would be equivalent to:
// auto storage = my_allocator(sizeof(int));
// auto x = marshal_me<int>(7, storage);
// func2(x, 13);
marshal_and_apply(func2, 7, 13);
// this call would be equivalent to:
// auto storage = my_allocator(sizeof(int) + sizeof(int) + sizeof(int));
// auto x = marshal_me<int>(7, storage);
// auto y = marshal_me<int>(13, storage + sizeof(int));
// auto z = marshal_me<int>(42, storage + sizeof(int) + sizeof(int));
// func3(x,y,z);
marshal_and_apply(func3, 7, 13, 42);
Bu sorunu çözmek için, marshal_and_apply
f
'in parametre türlerini incelemek için bir mekanizma gerektirir gibi görünüyor. Bunun genel olarak mümkün olmadığına inanıyorum, ancak özel bir tür kümeden birinin (bu durumda, marshal_me<T>
) belirli bir parametrenin türüne dönüştürülebilir olup olmadığını tanımak mümkün olabilir.
marshal_and_apply
nasıl oluşturmalıyım?
İkinci örneğinizde, "7" ile yaptığınızı göremiyorum. Bunu mu demek istediniz: auto x = marshal_me (storage, 7); 'ya da bir şey mi? –
@AaronMcDaid Evet, düzeltdim. –
Eğer marshal_me '' int 'bir' '' '' func2 (7, 13) 'çağırabilir '' bir kurucuya sahipse. Sarıcı hangi ek faydasıdır? –