Есть ли способ создать функцию, которая принимает несколько параметров нецелого типа и один аргумент, не делая каждый параметр тоже аргументом?
Я не знаю, хорошая ли это идея, но ... да, я полагаю, вы можете заключить значения с плавающей запятой в static
константу внутри struct
.
Начиная с C ++ 11 (constexpr
), вы можете просто определить
struct X1 { static constexpr double value { 1.2 }; };
struct X2 { static constexpr double value { 2.3 }; };
struct X3 { static constexpr double value { 3.4 }; };
struct Y1 { static constexpr double value { 4.5 }; };
struct Y2 { static constexpr double value { 5.6 }; };
struct Y3 { static constexpr double value { 6.7 }; };
передать их в качестве параметра шаблона в sellmeier()
sellmeier<X1, X2, X3, Y1, Y2, Y3>(1.0);
и используйте value
типов внутри sellmeier()
template <typename B1, typename B2, typename B3,
typename C1, typename C2, typename C3>
double sellmeier (const double wavelength)
{
double refractive_index_sq = 1;
double lambda_sq = std::pow(wavelength, 2);
refractive_index_sq += B1::value*lambda_sq/(lambda_sq-C1::value);
refractive_index_sq += B2::value*lambda_sq/(lambda_sq-C2::value);
refractive_index_sq += B3::value*lambda_sq/(lambda_sq-C3::value);
return refractive_index_sq;
}
До C ++ 11 (недоступно constexpr
) синтаксис для определения структур обтекания немного раздражает: вам нужно инициализировать значение const
вне тела структур
struct X1 { static double const value; };
struct X2 { static double const value; };
struct X3 { static double const value; };
struct Y1 { static double const value; };
struct Y2 { static double const value; };
struct Y3 { static double const value; };
double const X1::value = 1.2;
double const X2::value = 2.3;
double const X3::value = 3.4;
double const Y1::value = 4.5;
double const Y2::value = 5.6;
double const Y3::value = 6.7;