Имам структура Opers
с някои аритметични операции: mult()
, div()
, mod()
.
И трябва да специализирам шаблон за определени стойности на n
. Ето пример за Opers<1>
.
Но също така искам да направя специализация за n
, които са степени на 2 (n = 2,4,8,16, ...) – в този случай мога да оптимизирам операции mult()
и div()
(използвайки побитово изместване наляво или надясно).
#include <iostream>
using namespace std;
template<int n> struct Opers {
int mult(int x){
return n*x;
}
int div(int x){
return x / n;
}
int mod(int x){
return x % n;
}
};
template<> struct Opers<1> {
int mult(int x){
return 1;
}
int div(int x){
return x;
}
int mod(int x){
return 0;
}
};
int main() {
Opers<1> el2;
cout << el2.mult(3) <<endl;
}
Търся строителство като
template<> struct Opers<isPowerOfTwo()>
int mult(int x){
// do smth
}
Възможно ли е или какво ръководство трябва да прочета?
UPD. Използването на C++11 е разрешено и дори би било по-добре.