私は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
}
可能ですか、またはどのマニュアルを読む必要がありますか?
アップデート。C++11 の使用は許可されており、さらに優れているでしょう。