【发布时间】:2014-05-13 14:48:41
【问题描述】:
我对元编程完全是个菜鸟,我的问题很简单,但我还没有找到简单的答案。here 回答了类似的问题,但我无法将其转化为我的需要。
我有这样的课
class Program {
public:
Program(){}
SetMatrixUniform(){
CallSomeMethodX();
}
~Program(){}
};
但我有这样的场景,我需要具有相同方法的同一个类,但在它们的主体中调用不同的函数。像这样:
class Program {
public:
Program(){}
SetMatrixUniform(){
CallSomeMethodY();
}
~Program(){}
};
我想要一个带有“true”参数的类的模板接口来选择在编译时放入类成员方法中的内容,而不是维护2个这样的类。
类似这样的:
Program<true> myProg; ///expands CallSomeMethodX(); into SetMatrixUniform()
同时:
Program<false> myProg; ///expands CallSomeMethodY(); into SetMatrixUniform()
我已经看到了声明类变体然后通过特化最终类扩展其中一个的示例。我想在不使用继承的情况下这样做,因为性能在这里非常重要。
【问题讨论】:
-
您可能对this blog entry 感兴趣。这就是我通常用来解决这类问题的方法。同样适用于例如选择提供行为实现的特定基类。
标签: c++ templates metaprogramming