Vì vậy, cách tôi đã đi về nó là một chút cụ thể hơn cho những gì tôi đã thực sự làm. Hóa ra một số thông tin tôi nghĩ là bên cạnh điểm đã giúp tôi. Tôi nghĩ rằng mặc dù một kỹ thuật tương tự có thể được sử dụng cho mọi trường hợp.
Đối với một điều ... trong trường hợp của tôi "thingy <>" thực sự có giá trị trong đó và được chuyển đến hàm invoker. Điều này thực sự giúp ích rất nhiều.
Ngoài ra, vì đối tượng là để chuyển đổi nội dung trong thingy để phục vụ như gây ra cho một thingy lạ, và ints được thông qua trong chỉ mục là thingy đầu tiên ... ints kết thúc tất cả là 1 khi tôi làm sự đệ quy của tôi. Vì vậy, trong khi những gì tôi là sau khi một cái gì đó tương tự (đơn giản để loại bỏ các tuple giây):
f(get(my_thingy, idx<1>), get(my_thingy, idx<2>), ...)
Nó chỉ ra các đệ quy được thoát khỏi idx < 2> ...idx:
template < typename Fun, typename H, typename ... T, typename ... Args >
auto call(Fun f, thingy<H,T...> const& t, Args&& ... args)
-> decltype(call(f,static_cast<thingy<T...>const&>(t), get(t,idx<1>), std::forward<Args>(args)...)
{
return call(f, static_cast<thingy<T...>const&>(t), get(t, idx<1>), args...);
}
template < typename Fun, typename ... Args >
auto call(Fun f, thingy<> const&, Args&& ... args)
-> decltype(f(std::forward<Args>(args)...))
{
return f(std::forward<Args>(args)...);
}
tôi đã không thể hoàn toàn kiểm tra điều vì get
chức năng không thành công trên tôi vì một lý do khi sử dụng const & ... kinda pissing tôi ra. Tôi khá tự tin rằng điều này thực hiện các trick mặc dù.
Nếu tham số idx không phải luôn luôn 1 Tôi nghĩ rằng có thể được chuyển tiếp theo cách tương tự.
Câu trả lời hay - điều đó sẽ khiến tôi trở nên hoàn toàn tự tin hơn với những thứ như thế! +1 –
Ngọt ngào. Tôi sẽ phải kiểm tra xem nó ra. Tôi sẽ đăng câu trả lời của riêng tôi mà không làm nó ... nhận được cuộc gọi được thực hiện mà không trả lời câu hỏi đó là. Thật không may, khi tôi đang làm việc trên nó tôi chạy vào rắc rối khác với giao diện của loại cơ bản của tôi, freaked ra một lúc, đã làm một shot, và đi ngủ. –
@CrazyEddie: Tôi rất vui nếu bạn có thể ping tôi (viết bình luận ở đây) khi bạn trả lời :) –