当前位置:  开发笔记 > 编程语言 > 正文

具有相关值的模板特化

如何解决《具有相关值的模板特化》经验,为你挑选了2个好方法。

使用数组大小​​的模板似乎很简单:

template 
struct MyArray
{
    char array[N];
};

但是,我想要做的是根据其他内容设置数组大小:

enum MyEnum {Hi, Lo};

template 
struct MyArray
{
    MyEnum type() { return T; }
    char array[N];
};

当MyEnum为Hi时如何将N设置为10,当MyEnum为Lo时如何设置为200?

我想做的就是说

MyArray lo; // Result in MyArray
MyArray hi; // Result in MyArray

而不是说

MyArray lo;
MyArray hi;

这可能吗?



1> LogicStuff..:

您可以立即创建默认值N,与使用普通函数参数一样:

enum MyEnum { Hi, Lo };

template  // parentheses for clarity
struct MyArray { ... };

实例



2> Jarod42..:

你有几种可能性

N直接在主类中使用计算:

template 
class MyArray
{
    constexpr std::size_t N = (E == Hi ? 10 : 200);
public:
    MyEnum type() { return E; }
    char array[N];
};

或专门化

template  struct MyArraySize;
template <> struct MyArraySize : std::integral_constant {};
template <> struct MyArraySize : std::integral_constant{};

template 
class MyArray
{
public:
    MyEnum type() { return E; }
    char array[MyArraySize::value];
};

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有