I have a template A
with non-type parameter:
template <int param = 0>
class A
{
public:
static constexpr void print()
{
std::cout << param << std::endl;
}
};
And I have a class B
, in the constructor of which I'm going to use the template A
.
class B
{
public:
B()
{
A<> a{};
}
};
To initialise a
I want to use constexpr int
from main function.
int main()
{
constexpr int val = 123;
B b{};
}
In case of general function, I could just turn it into the template, but as far as I know it does not work for constructors. At least it didn't work for me.
Making the entire class B
into a template is not an option, I need it to remain a class.
Is it possible to pass val
from main to class B
constructor?
You might use std::integral_constant
to pass that constant:
class B
{
public:
template <int N>
explicit B(std::integral_constant<int, N>)
{
A<N> a{};
}
};
int main()
{
constexpr int val = 123;
B b{std::integral_constant<int, val>{}};
}