#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];
}