c++函数专门化从类模板

  • 本文关键字:函数 专门化 c++ c++ c++11
  • 更新时间 :
  • 英文 :


我有一个类,classB,它有几个函数,我想基于枚举器模板S来专门化。

我有下面的例子:

#include <iostream>
#include <string>
#include <array>

typedef std::array<double, 3> vec;
enum Op {Op1, Op2, Op3};
template<class T, enum Op S=Op1>
class classA
{
public:
class innerClassA
{
public:

void foo() const
{
std::cout <<"Operation 1" << std::endl;
}
};
};
template<class T>
class classB
{
public:
template <Op S = Op1> 
void myFunc() 
{
typename classA<T, S>::template innerClassA myInnerClassObj; 
for (int i = 0; i < 10; i++)    
myInnerClassObj.foo();
}
// Other functions the I would like to able to speciallize afterwards based on template S
void myFunc2()  { std::cout << "Func 2" << std::endl; } 
void myFunc3()  { std::cout << "Func 3" << std::endl; }
};
template<>
void classA<vec, Op2>::innerClassA::foo() const
{
std::cout << "Operation 2" << std::endl;
}
template<>
void classA<vec, Op3>::innerClassA::foo() const
{
std::cout << "Operation 3" << std::endl;
}
int main(int argc, char** argv)
{
classB<vec> obj;
obj.myFunc();
obj.myFunc2();
obj.myFunc<Op2>();
obj.myFunc<Op3>();
return 0;
}

在上面的例子中。myFunc函数有一个基于枚举数的模板形参。在main函数中,我可以根据枚举数的值调用专门化版本。我也想对其他函数做同样的事情,myFunc2然而,总是必须放入:

template <Op S = Op1> 
someFunction()

很烦人。是否有其他方法可以指定类中的所有函数都具有基于枚举数的默认模板?

亲切的问候

不,没有,除了宏。

#define OPFUNC template<Op S = Op1> void
OPFUNC myFunc() {}
OPFUNC myFunc2() {}
...
#undef OPFUNC

最新更新