gpt4 book ai didi

c++ - 全局 bool 变量和模板

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:25 26 4
gpt4 key购买 nike

在 C++ 类中,我在构造函数中设置了一个全局 bool 变量 *const_var* 并且在其他地方没有改变;并且在我的类中有很多关于此变量的if 条件,为了优化代码,我想使用模板 es:template < bool const_var> 和带有 的实例对象X< true>()

我该怎么办?谢谢

这里是一个没有模板的简单类:

.h文件

class X {
public:
bool const_var;

X(bool b);
void method1();

void method2();
void method3();
};

.cpp文件

X::X(bool b){
const_var=b; //unchanged elsewhere
}

void X::method1(){
...
if(const_var==true)
...
if(const_var==false)
...
}

void X::method2(){
...
if(const_var==true)
...
if(const_var==true)
...
}

void X::method3(){
...
if(const_var==false)
...
if(const_var==true)
...
}

最佳答案

您必须将类定义更改为类模板定义:

template <bool const_var>
class X
{
public:
X();
void method1();
void method2();
void method3();
};

在实现中,您将执行:

template <bool const_var>
X<const_var>::X() {}

template <bool const_var>
X<const_var>::method1()
{
//...
if (const_var)
//...
if (!const_var)
//...
}

//dtto for method2 and method3

if s 将被编译器优化掉。

但是,模板必须显式实例化,或者它们的定义必须在使用它们的每个翻译单元中可用。这意味着您必须或者将函数体移动到头文件中,或者将以下行添加到 .cpp 中:

template class X<true>;
template class X<false>;

另请注意,当您更改 X 时进入类模板,X将不再是一种类型;只有X<true>X<false>是类型。这意味着你不能,例如,声明一个变量 X x1(true); ,它必须是例如X<true> x1; .

关于c++ - 全局 bool 变量和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14733422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com