模板中的模板对象

问题描述 投票:0回答:1

我想要一个带有参数 typename T 的模板和一个代表 null_object 的 T 类型对象。目标是创建一个容器类,其中对于每种类型,为空构造函数提供给定的 null_value。例如

template<typename T, T null_value>
class MyObject {
private:
     std::array<T,4> data;

public:
    MyObject() {
        data.fill(null_value);
    }
};

但是,我无法使用上面给定的语法来执行此操作。我怎样才能做到这一点?如果嵌套模板不可能做到这一点,是否有办法为某些给定的模板值定义不同的构造函数?例如

template<typename T>
class MyObject {
private:
    std::array<T,4> data;

public:
    MyObject<int>() {
        data.fill(0);
    }

    MyObject<float>() {
        data.fill(0.0f);
    }

    MyObject<char>() {
        data.fill('a');
    }
};
c++ templates syntax
1个回答
0
投票

如果问题是“如何根据类型选择填充值”,那么我建议您:

MyObject() {
    if constexpr (std::is_same_v<T, int>) {
        data.fill(0);
    } 
    ... etc ...
}

或者从辅助模板获取值:

private:
    template <typename T> struct DefaultValue {};
    template <> struct DefaultValue<int> { static constexpr int value = 0; };
    template <> struct DefaultValue<float> { static constexpr float value = 0.0f; };
    // ... etc ...

public:
    MyObject() {
        data.fill(DefaultValue<T>::value);
    }
© www.soinside.com 2019 - 2024. All rights reserved.