rvalue引用和模板参数

时间:2016-06-04 15:29:55

标签: c++ templates rvalue-reference non-type

为什么不允许使用此语法:

@classonlymethod
def as_view(cls, **initkwargs):
    ...
    def view(request, *args, **kwargs):
        # See: view cls is only instantiated when 'view' is called
        self = cls(**initkwargs)
        ...
        return self.dispatch(request, *args, **kwargs)
    ...
    return view

我们必须这样做:

template<float&& value>
struct MyStruct{
  float GetValue() { return value; }
};

MyStruct<12.1f> myFloat;

我认为没有理由禁止第一个 第一种语法不那么笨重,第二种语法只是让它看起来像是c ++的创造者只是想让事情变得困难......那么为什么会这样呢?

1 个答案:

答案 0 :(得分:0)

由于模板处理非常复杂,我认为设计师正确地拒绝了可以使用其他方法轻松完成的功能。存在模板参数来自定义代码的行为,而不仅仅是插入常量。这就是支持int模板参数的原因,因此您可以执行以下操作:

template <int SIZE> struct X {
    char buffer[SIZE];
};

如果您只想在类的实例中使用常量,请将其添加到构造函数中:

class X {
public:
    X(float value_) {
        value = value_;
    }
    float value;
};

如果你真的想要一个使用该常量的自定义类,那么:

class X71 : public X {
public:
    X71() : X(7.1f) {}
};