#include <vector>
#include <cstdlib>
#include <cstdarg>
#include <iterator>
#include <iostream>
namespace Interpolation
{
unsigned long DefaultRes = 1;
template<class T, unsigned D>
struct Node
{
Node(T const *Data, unsigned long Resolution = DefaultRes);
T Data[D];
unsigned long Resolution;
};
template<class T, unsigned D>
Node<T, D> MakeNode(T First, ...);
}
template<class T, unsigned D>
Interpolation::Node<T, D>::Node(T const *Data, unsigned long Resolution)
: Resolution(Resolution)
{
for(unsigned i = 0; i < D; i++)
this->Data[i] = Data[i];
}
template<class T, unsigned D>
Interpolation::Node<T, D>
Interpolation::MakeNode(T First, ...)
{
T Data[D] = {First};
va_list Args;
va_start(Args, First);
for(unsigned i = 1; i < D; i++)
Data[i] = va_arg(Args, T);
va_end(Args);
return Interpolation::Node<T, D>(Data);
}
int main()
{
using Interpolation::MakeNode;
std::vector< ::Interpolation::Node<float, 2> > Data;
Data.push_back(MakeNode<float, 2>(5, 5));
std::cout << Data.front().Data[0] << ' ' << Data.front().Data[1];
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RkYXJnPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxpb3N0cmVhbT4KbmFtZXNwYWNlIEludGVycG9sYXRpb24KewogICAgdW5zaWduZWQgbG9uZyBEZWZhdWx0UmVzID0gMTsKICAgIHRlbXBsYXRlPGNsYXNzIFQsIHVuc2lnbmVkIEQ+CiAgICBzdHJ1Y3QgTm9kZQogICAgewogICAgICAgIE5vZGUoVCBjb25zdCAqRGF0YSwgdW5zaWduZWQgbG9uZyBSZXNvbHV0aW9uID0gRGVmYXVsdFJlcyk7CiAgICAgICAgVCBEYXRhW0RdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgUmVzb2x1dGlvbjsKICAgIH07CiAgICB0ZW1wbGF0ZTxjbGFzcyBULCB1bnNpZ25lZCBEPgogICAgTm9kZTxULCBEPiBNYWtlTm9kZShUIEZpcnN0LCAuLi4pOwp9CnRlbXBsYXRlPGNsYXNzIFQsIHVuc2lnbmVkIEQ+CkludGVycG9sYXRpb246Ok5vZGU8VCwgRD46Ok5vZGUoVCBjb25zdCAqRGF0YSwgdW5zaWduZWQgbG9uZyBSZXNvbHV0aW9uKQo6IFJlc29sdXRpb24oUmVzb2x1dGlvbikKewogICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgRDsgaSsrKQogICAgICAgIHRoaXMtPkRhdGFbaV0gPSBEYXRhW2ldOwp9CnRlbXBsYXRlPGNsYXNzIFQsIHVuc2lnbmVkIEQ+CkludGVycG9sYXRpb246Ok5vZGU8VCwgRD4KSW50ZXJwb2xhdGlvbjo6TWFrZU5vZGUoVCBGaXJzdCwgLi4uKQp7CiAgICBUIERhdGFbRF0gPSB7Rmlyc3R9OwogICAgdmFfbGlzdCBBcmdzOwogICAgdmFfc3RhcnQoQXJncywgRmlyc3QpOwogICAgZm9yKHVuc2lnbmVkIGkgPSAxOyBpIDwgRDsgaSsrKQogICAgICAgIERhdGFbaV0gPSB2YV9hcmcoQXJncywgVCk7CiAgICB2YV9lbmQoQXJncyk7CiAgICByZXR1cm4gSW50ZXJwb2xhdGlvbjo6Tm9kZTxULCBEPihEYXRhKTsKfQppbnQgbWFpbigpCnsKICAgIHVzaW5nIEludGVycG9sYXRpb246Ok1ha2VOb2RlOwogICAgc3RkOjp2ZWN0b3I8IDo6SW50ZXJwb2xhdGlvbjo6Tm9kZTxmbG9hdCwgMj4gPiBEYXRhOwogICAgRGF0YS5wdXNoX2JhY2soTWFrZU5vZGU8ZmxvYXQsIDI+KDUsIDUpKTsKICAgIHN0ZDo6Y291dCA8PCBEYXRhLmZyb250KCkuRGF0YVswXSA8PCAnICcgPDwgRGF0YS5mcm9udCgpLkRhdGFbMV07Cn0=