我正在尝试运行以下C++代码:
#include <cmath>
template<typename T, bool> class ConditionalData {
};
template <typename T> class ConditionalData<T, false> {
};
template <typename T> class ConditionalData<T, true> {
private:
T data;
public:
void setData(T _data) { data = _data; }
};
template<bool hasdata> class A {
public:
A() {
ConditionalData<double,hasdata> data;
if (hasdata) {
data.setData(sin(cos(123.4)));
}
}
};
int main(int argNum, const char**argData) {
A<false> test1;
A<true> test2;
return 0;
}
本质上,我想实现一个模板化的类A,在这个模板化的类中,某些操作是根据模板参数来执行的。这些操作需要局部变量,我只想在需要时分配这些变量。我在这里遇到的问题是
if (hasdata) {
data.setData(3);
}
对于不能编译(使用g++ 5.2)的hasdata=false,条件也是实例化的。你知道如何在不将A::A()的主体分割成碎片的情况下以最干净的方式完成这项工作吗?
上面的源代码是一个最小的非工作示例。A::A()的实际实现相对较长,依赖于"hasdata“的部分均匀分布在代码中。此外,将使用类A的"typename“是一个相对复杂的类,具有重量级的构造函数/析构函数,因此我希望T的实例仅在hasdata=true时分配。最后,在data.setData中(...)调用时,可以在"...“中进行复杂的计算,这些计算应该只在需要时执行。
https://stackoverflow.com/questions/34589458
复制相似问题