假设我们有struct X;
并且我们使用C ++ 11编译器(例如gcc 4.7)。当且仅当opt = true
。
template <bool opt>
struct X {
void foo() {
EMIT_CODE_IF(opt) {
// optional code
}
// ...common code...
}
int optional_variable; // Emitted if and only if opt is true
};
if
就足够了。opt = false
时),那么它们和 COULD 会被编译器自动省略吗? opt = false
时,我绝对不希望他们在那里。答案 0 :(得分:3)
避免类模板中的属性的方法是从基类模板派生,如果成员不在那里,该模板专门为空。例如:
template <bool Present, typename T>
struct attribute {
attribute(T const& init): attribute_(init) {}
T attribute_;
};
template <typename T>
struct attribute<false, T> {
};
template <bool opt>
class X: attribute<opt, int> {
...
};
关于可选代码,您可能会使用条件语句,但通常代码无法编译。在这种情况下,您需要将代码分解为合适的函数对象,该对象专门在不需要时不执行任何操作。