mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
slightly better organization, but same compiling problem
This commit is contained in:
parent
26da831b01
commit
35cc16d22c
|
|
@ -91,10 +91,7 @@ struct _EngineFunctionDefaultArguments {};
|
|||
template<typename ...ArgTs>
|
||||
struct _EngineFunctionDefaultArguments< void(ArgTs...) > : public EngineFunctionDefaultArguments
|
||||
{
|
||||
|
||||
|
||||
template<typename T> using DefVST = typename EngineTypeTraits<T>::DefaultArgumentValueStoreType;
|
||||
|
||||
std::tuple<DefVST<ArgTs> ...> mArgs;
|
||||
private:
|
||||
using SelfType = _EngineFunctionDefaultArguments< void(ArgTs...) >;
|
||||
|
|
@ -105,22 +102,24 @@ private:
|
|||
template<size_t ...I> struct Gens<0, I...>{ typedef Seq<I...> type; };
|
||||
|
||||
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));
|
||||
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) {
|
||||
mNumDefaultArgs = sizeof...(TailTs);
|
||||
copyHelper(std::make_tuple(tail...), typename Gens<sizeof...(TailTs)>::type());
|
||||
template<typename ...TailTs> static MaybeSelfEnabled<TailTs...> tailInit(DefVST<TailTs> ...tail) {
|
||||
std::tuple<ArgTs...> argsT;
|
||||
std::tuple<TailTs...> tailT = std::make_tuple(tail...);
|
||||
SelfType::copyHelper(argsT, tailT, typename Gens<sizeof...(TailTs)>::type());
|
||||
return argsT;
|
||||
};
|
||||
|
||||
public:
|
||||
template<typename ...TailTs> _EngineFunctionDefaultArguments(DefVST<TailTs> ...tail)
|
||||
{
|
||||
tailInit(tail...);
|
||||
}
|
||||
template<typename ...TailTs> _EngineFunctionDefaultArguments(DefVST<TailTs> ...tail)
|
||||
: EngineFunctionDefaultArguments({sizeof...(TailTs)}), mArgs(tailInit(tail...))
|
||||
{}
|
||||
};
|
||||
|
||||
#pragma pack( pop )
|
||||
|
|
|
|||
Loading…
Reference in a new issue