gpt4 book ai didi

c++ - 使用花括号初始化器列表时模板参数推导失败

转载 作者:搜寻专家 更新时间:2023-10-31 01:24:32 24 4
gpt4 key购买 nike

我正在尝试在“perpendicular()”函数中使用模板参数推导:

#include <iostream>

template <typename component = double>
struct offset {
component x;
component y;
};

template <typename component>
offset(component x, component y) -> offset<component>;

template <typename component>
offset<component> perpendicular(offset<component> const &o) {
return offset{o.y, -o.x};
}

template <typename component>
std::ostream &operator<<(std::ostream &s, offset<component> const &o) {
return s << '(' << o.x << ", " << o.y << ')';
}

int main() {
std::cout << perpendicular({3.1, 1.2}) << '\n';
return 0;
}

然而,这并不能编译; Clang(带有 -std='c++17' )说: candidate template ignored: couldn't infer template argument 'component' offset<component> perpendicular(offset<component> const &o) { .

我应该放弃写作吗 perpendicular(offset{1.0, 2.0})或者有没有办法给编译器一个提示?

最佳答案

问题 {/*..*/}是它没有类型,而且大多只能推断为 std::initializer_list<T>T[N] .

因此以下将允许所需的语法:

template <typename component>
offset<component> perpendicular(component const (&o)[2]) {
return offset{o[1], -o[0]};
// return perpendicular(offset{o[0], o[1]});
}

Demo

关于c++ - 使用花括号初始化器列表时模板参数推导失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58119140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com