Я хочу определить максимальный размер следующего варианта c экземпляра класса шаблона во время компиляции.
template <typename... T>
class Foo
{
public:
std::tuple<T...> params;
void (*func)(T...);
void save(T...args)
{
params=std::make_tuple(args...);
}
void call()
{
std::apply(func,params);
}
};
Я хочу использовать этот класс следующим образом:
void testfoo1(int a,double b,double c,double d)
{
std::cout<<a<<"--"<<b<<c<<d<<std::endl;
}
void testfoo2(int a,double b,double c,double d,int e,long long int f)
{
std::cout<<a<<"--"<<b<<c<<d<<e<<f<<std::endl;
}
struct FooObject
{
char buffer[MAX_SIZE_FOO_OBJECT];
};
int main()
{
std::queue<FooObject> fooObjectBuffer;
FooObject foo_temp;
Foo<int,double,double,double> foo1;
Foo<int,double,double,double,int,long long int> foo2;
foo1.func=testfoo1;
foo1.save(5,10.2,5.3,2.7);
foo2.func=testfoo2;
foo2.save(1,2,3,4,5,6);
fooObjectBuffer.push(*reinterpret_cast<FooObject*>(&foo1));
fooObjectBuffer.push(*reinterpret_cast<FooObject*>(&foo2));
foo_temp=fooObjectBuffer.front();
reinterpret_cast<decltype (foo1)*>(&foo_temp)->call();
fooObjectBuffer.pop();
fooObjectBuffer.front();
foo_temp=fooObjectBuffer.front();
reinterpret_cast<decltype (foo2)*>(&foo_temp)->call();
fooObjectBuffer.pop();
}
I необходимо знать значение MAX_SIZE_FOO_OBJECT, чтобы сделать это во время компиляции. Что я могу сделать, чтобы узнать значение MAX_SIZE_FOO_OBJECT во время компиляции?