slightly better organization, but same compiling problem

This commit is contained in:
Thomas "elfprince13" Dickerson 2017-01-06 03:17:53 -05:00
parent 26da831b01
commit 35cc16d22c

View file

@ -91,10 +91,7 @@ struct _EngineFunctionDefaultArguments {};
template<typename ...ArgTs> template<typename ...ArgTs>
struct _EngineFunctionDefaultArguments< void(ArgTs...) > : public EngineFunctionDefaultArguments struct _EngineFunctionDefaultArguments< void(ArgTs...) > : public EngineFunctionDefaultArguments
{ {
template<typename T> using DefVST = typename EngineTypeTraits<T>::DefaultArgumentValueStoreType; template<typename T> using DefVST = typename EngineTypeTraits<T>::DefaultArgumentValueStoreType;
std::tuple<DefVST<ArgTs> ...> mArgs; std::tuple<DefVST<ArgTs> ...> mArgs;
private: private:
using SelfType = _EngineFunctionDefaultArguments< void(ArgTs...) >; using SelfType = _EngineFunctionDefaultArguments< void(ArgTs...) >;
@ -105,22 +102,24 @@ private:
template<size_t ...I> struct Gens<0, I...>{ typedef Seq<I...> type; }; template<size_t ...I> struct Gens<0, I...>{ typedef Seq<I...> type; };
template<typename ...TailTs, size_t ...I> template<typename ...TailTs, size_t ...I>
void copyHelper(std::tuple<DefVST<TailTs> ...> defaultArgs, Seq<I...>) { static void copyHelper(std::tuple<DefVST<ArgTs> ...> &args, std::tuple<DefVST<TailTs> ...> &defaultArgs, Seq<I...>) {
constexpr size_t offset = (sizeof...(ArgTs) - sizeof...(TailTs)); constexpr size_t offset = (sizeof...(ArgTs) - sizeof...(TailTs));
std::tie(std::get<I + offset>(mArgs)...) = defaultArgs; std::tie(std::get<I + offset>(args)...) = defaultArgs;
} }
template<typename ...TailTs> using MaybeVoidEnabled = typename std::enable_if<sizeof...(TailTs) <= sizeof...(ArgTs), void>::type; template<typename ...TailTs> using MaybeSelfEnabled = typename std::enable_if<sizeof...(TailTs) <= sizeof...(ArgTs), decltype(mArgs)>::type;
template<typename ...TailTs> MaybeVoidEnabled<TailTs...> tailInit(DefVST<TailTs> ...tail) { template<typename ...TailTs> static MaybeSelfEnabled<TailTs...> tailInit(DefVST<TailTs> ...tail) {
mNumDefaultArgs = sizeof...(TailTs); std::tuple<ArgTs...> argsT;
copyHelper(std::make_tuple(tail...), typename Gens<sizeof...(TailTs)>::type()); std::tuple<TailTs...> tailT = std::make_tuple(tail...);
SelfType::copyHelper(argsT, tailT, typename Gens<sizeof...(TailTs)>::type());
return argsT;
}; };
public: public:
template<typename ...TailTs> _EngineFunctionDefaultArguments(DefVST<TailTs> ...tail) template<typename ...TailTs> _EngineFunctionDefaultArguments(DefVST<TailTs> ...tail)
{ : EngineFunctionDefaultArguments({sizeof...(TailTs)}), mArgs(tailInit(tail...))
tailInit(tail...); {}
}
}; };
#pragma pack( pop ) #pragma pack( pop )