C++
अरथमितिक मेटाप्रोग्रामिंग
खोज…
परिचय
ये संकलन समय में arithmitic संचालन प्रसंस्करण में C ++ टेम्पलेट मेटाप्रोग्रामिंग का उपयोग करने के उदाहरण हैं।
ओ में शक्ति की गणना (लॉग एन)
यह उदाहरण टेम्पलेट मेटाप्रोग्रामिंग का उपयोग करके शक्ति की गणना करने का एक कुशल तरीका दिखाता है।
template <int base, unsigned int exponent>
struct power
{
static const int halfvalue = power<base, exponent / 2>::value;
static const int value = halfvalue * halfvalue * power<base, exponent % 2>::value;
};
template <int base>
struct power<base, 0>
{
static const int value = 1;
static_assert(base != 0, "power<0, 0> is not allowed");
};
template <int base>
struct power<base, 1>
{
static const int value = base;
};
उदाहरण उपयोग:
std::cout << power<2, 9>::value;
सी ++ 14
यह एक नकारात्मक घातांक भी संभालता है:
template <int base, int exponent>
struct powerDouble
{
static const int exponentAbs = exponent < 0 ? (-exponent) : exponent;
static const int halfvalue = powerDouble<base, exponentAbs / 2>::intermediateValue;
static const int intermediateValue = halfvalue * halfvalue * powerDouble<base, exponentAbs % 2>::intermediateValue;
constexpr static double value = exponent < 0 ? (1.0 / intermediateValue) : intermediateValue;
};
template <int base>
struct powerDouble<base, 0>
{
static const int intermediateValue = 1;
constexpr static double value = 1;
static_assert(base != 0, "powerDouble<0, 0> is not allowed");
};
template <int base>
struct powerDouble<base, 1>
{
static const int intermediateValue = base;
constexpr static double value = base;
};
int main()
{
std::cout << powerDouble<2,-3>::value;
}
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow