【发布时间】:2013-06-02 13:46:57
【问题描述】:
我有 struct 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,甚至会更好。
【问题讨论】:
-
啊...通过使用班次进行优化。编译器会说,“哇,我从来没有想到过”......
-
我知道编译器没关系!这只是一个示例(与我的学习任务相关),我找不到正确的代码结构或方法......
标签: c++ templates c++11 template-specialization partial-specialization