28 lines
645 B
C
28 lines
645 B
C
|
#ifndef ALSK_ALSK_SKELETON_LINK_UTILITY_H
|
||
|
#define ALSK_ALSK_SKELETON_LINK_UTILITY_H
|
||
|
|
||
|
#include "args.h"
|
||
|
|
||
|
namespace alsk {
|
||
|
|
||
|
template<typename> struct AutoLinkSerialImpl;
|
||
|
|
||
|
template<typename R, typename... Args>
|
||
|
struct AutoLinkSerialImpl<R(Args...)> {
|
||
|
template<typename> struct Helper;
|
||
|
template<std::size_t... indices>
|
||
|
struct Helper<std::index_sequence<indices...>> {
|
||
|
using in = R(alsk::arg::P<indices>...);
|
||
|
using out = alsk::arg::R<0>(Args...);
|
||
|
};
|
||
|
|
||
|
using type = Helper<decltype(std::make_index_sequence<sizeof...(Args)>())>;
|
||
|
};
|
||
|
|
||
|
template<typename Signature>
|
||
|
using AutoLinkSerial = typename AutoLinkSerialImpl<Signature>::type;
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif
|