请考虑以下事项:
template_adapter_t
(那么,这里发生了什么......我有一个'虚拟'类,foo_adapter_t
,它只作为一个特化限制器,一个具体的助手类foo
,一个自由函数template_adapter_t
,返回一个operator|
类型,一个template_adapter_t
的重载应该在LHS上取任何东西,一个指向不带参数的函数的指针在RHS上返回某种类型的int const values[] = { ... };
values | foo<2>;
。)
当我尝试使用它时:
std::vector<int>{} | foo<2>;
...我收到有关无效操作数的错误。
然而,这有效:
template <typename Range, int N>
auto operator|(
Range const& range,
foo_adapter_t<N> const& adapter)
-> decltype(adapter.adapt(range))
{ return adapter.adapt(range); }
values | foo_adapter_t<4>{};
此也有效:
react-native upgrade
...所以问题似乎与LHS上的匹配无关。在这两种情况下,RHS也是模板化的,但出于某种原因,采用结构的结构起作用,但采用函数的结构不起作用。
我错过了备用调用有效,但第一个调用没有?如何让第一张表格有效?
答案 0 :(得分:3)
这是因为你不能为2个指针重载运算符。至少应该使用一个操作数定义的类(参见here)。
在这一行:
values | foo<2>;
values
是指向const int
的指针,foo<2>
是一个函数指针,因此不会考虑重载运算符。