首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++模板中实现条件代码实例化的最简洁方法

在C++模板中实现条件代码实例化的最简洁方法
EN

Stack Overflow用户
提问于 2016-01-04 18:51:17
回答 4查看 4.5K关注 0票数 19

我正在尝试运行以下C++代码:

代码语言:javascript
复制
#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,在这个模板化的类中,某些操作是根据模板参数来执行的。这些操作需要局部变量,我只想在需要时分配这些变量。我在这里遇到的问题是

代码语言:javascript
复制
if (hasdata) {
    data.setData(3);
}

对于不能编译(使用g++ 5.2)的hasdata=false,条件也是实例化的。你知道如何在不将A::A()的主体分割成碎片的情况下以最干净的方式完成这项工作吗?

上面的源代码是一个最小的非工作示例。A::A()的实际实现相对较长,依赖于"hasdata“的部分均匀分布在代码中。此外,将使用类A的"typename“是一个相对复杂的类,具有重量级的构造函数/析构函数,因此我希望T的实例仅在hasdata=true时分配。最后,在data.setData中(...)调用时,可以在"...“中进行复杂的计算,这些计算应该只在需要时执行。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34589458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档