我正在尝试
let margins = view.layoutMarginsGuide
scrollView.leftAnchor.constraint(equalTo: margins.leftAnchor).isActive = true
scrollView.rightAnchor.constraint(equalTo: margins.rightAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: 0).isActive = true
scrollView.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true
scrollView.center = self.view.center // view is the base view of which scrollView is a subview of.
subView.leftAnchor.constraint(equalTo: scrollView.leftAnchor, constant: -1*scrollView.frame.width)
subView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: -1*scrollView.frame.height)
在一个函数中,但是clang会发出错误:期望的表达式。
例如
template <typename N>
using Array = std::array<std::uint8_t, N>;
会导致此错误。
这是不允许在功能中,如果是这样,为什么?感谢
答案 0 :(得分:2)
是的,alias template只能在类范围或命名空间范围内声明。
与任何模板声明一样,别名模板只能在类范围或命名空间范围内声明。
BTW:您应该为别名模板Array
声明non-type template parameter,例如
template <std::size_t N>
using Array = std::array<std::uint8_t, N>;
答案 1 :(得分:2)
这是不允许在功能中使用的,为什么会这样?
烨。因为C ++标准明确禁止所有模板。 [temp]/2说:
template-declaration 只能作为命名空间范围或类出现 范围声明。
理由可能是不要使已经脆弱的模板规范更容易受到ODR违规的影响。即使是现在,专业化的出现顺序也可能使程序形成不良或形式有些出乎意料。
问题的关键在于我们并不真正需要功能范围模板,IMO。